#c #graph #dynamic-programming
#c #График #динамическое программирование
Вопрос:
Мой код не работает для следующего тестового примера, пожалуйста, помогите
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, что является числом вершин во входном графе. Вторая строка каждого тестового примера содержит N x N двоичных значений, которые представляют граф [N] [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;
}
Комментарии:
1. Это похоже на проблему, которую было бы намного проще решить с помощью рекурсивного алгоритма. Я буду честен, этот код действительно трудно читать для большого резонанса, например, нет значимых имен переменных (например
arr
, вероятно, должно бытьAdjMat
), я бы также рекомендовал отредактировать вопрос, чтобы входные данные (двоичная строка) были в виде представления матрицы смежности2.https://www.geeksforgeeks.org/find-the-number-of-paths-of-length-k-in-a-directed-graph ?