微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

给定一个有向图,并在其中包含两个顶点“ u”和“ v”,计算从“ u”到“ v”的所有可能的走行,并且走行上恰好有k条边

如何解决给定一个有向图,并在其中包含两个顶点“ u”和“ v”,计算从“ u”到“ v”的所有可能的走行,并且走行上恰好有k条边

我的代码在以下测试用例中失败,请帮助

1
10
1 1 1 1 0 0 0 1 0 1
0 1 1 0 0 0 1 1 1 1
0 0 0 1 0 1 1 1 0 1
0 0 0 1 0 0 0 1 1 1
1 1 1 1 1 1 1 1 0 1
0 0 0 0 0 1 0 0 1 0
1 0 1 0 1 0 1 1 1 0
0 1 0 0 0 0 1 0 1 0
0 1 0 1 1 0 0 0 0 1
1 0 1 0 1 1 1 0 1 1
2 7 3

Its Correct output is:
11

And Your Code's output is:
6

给出一个有向图,并在其中包含两个顶点“ u”和“ v”,计算从“ u”到“ v”的所有可能的走行,并且走行上恰好有k条边。

输入:

输入的第一行包含一个整数T,它表示测试用例的数量。然后是T测试用例。每个测试用例包含三行。 每个测试用例的第一行是N,它是输入图中顶点的数量。 每个测试用例的第二行包含代表graph [N] [N]的N x N个二进制值。 每个测试用例的第三行包含u,v,k,其中u是起始位置,v是目标位置,k是边数。

Output:

Print all possible walks from 'u' to 'v'.

Constraints:

1 ≤ T ≤ 50
1 ≤ N ≤ 20
0 ≤ graph[][] ≤ 1

Example:

Input
1
4
0 1 1 1
0 0 0 1
0 0 0 1
0 0 0 0
0 3 2

Output
2

说明:

例如,考虑下图。假设源‘u’是顶点0,目标’v’是顶点3,k是2。输出应该是2,因为从0到3有两个步行,正好有2个边。步行为{0,2,3}和{0,1,3}

我的密码

#include <iostream>
using namespace std;

int main() {
    //code
    int t;
    cin>>t;
    while(t--)
    {
        int r,c;
        cin>>r;
        c=r;
        int arr[r][c];
        for(int i=0;i<r;i++)
        {
            for(int j=0;j<c;j++)
            {
                cin>>arr[i][j];
            }
        }
        int u,v,k;
        cin>>u>>v>>k;
        int dp[r][k+1];
        for(int i=0;i<r;i++)
        {
            for(int j=0;j<k+1;j++)
            {
                dp[i][j]=0;
            }
        }
        dp[u][0]=1;

        for(int j=0;j<k+1;j++)
            {
               for(int i=0;i<r;i++)
              {
                if(dp[i][j]!=0)
                {
                    for(int x=0;x<r;x++)
                    {
                        if(arr[i][x]==1)
                        {if(j+1<k+1)
                            dp[x][j+1]++;
                        }
                    }
                }
               }
            }
            cout<<dp[v][k]<<endl;
        
        
    }
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。