c++ - 给定一个有向图和其中的两个顶点“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;
}
解决方案
推荐阅读
- laravel - 雄辩的试图与时间约会
- python - 使用 LayerControl 的叶图例可视化
- jestjs - 如果使用扩展运算符,覆盖率很低,但与 Objec.assign 配合使用效果很好
- c++ - 在堆上存储 3D 数组作为结构成员
- spring - Spring Boot 传递异步数据以查看
- php - 安卓聊天应用程序的平面文件或数据库
- python - 如何解决基于精度分数的自定义损失函数的“无梯度提供值错误”?
- google-speech-to-text-api - 如何解决 Cloud Run 中的 Google Speech-to-Text long_running_recognize 错误?
- css - 如果设置了颜色,如何启用悬停颜色更改?
- algorithm - 算法分析,什么算作关键比较?