跳到主要內容

所有路徑

/*
首先我想說明幾點問題。
你給的信息太少了,所以我只能自己假定某些條件,然後去實現程序。
1.我是在原來的程序上稍微改動了一下。
2.程序中的路徑這次設為單項的,graph[i][j]表示從i到j有一條路徑,而不能表示從j到i
也有一條路徑。這點要注意
3.設定矩陣中只有0和1,1表示有一條路徑,0表示沒有路徑
4.設定該程序的輸入格式為:首先輸入一個n表示一共有n個節點;然後輸入n*n的矩陣;
最後輸入兩個數x,y(1<=x,y<=n),表示求x, y這兩點之間的所有路徑。
*/

#include <stdio.h>
#include <math.h>

int graph[100][100];///graph[i][j]為0表示i, j兩點之間不通,為1表示有一條路
int stack[120], m=1, n, x, y;///存儲路徑

void dfs(int p)
{
int i, j;

for(i=1; i<=n; i++)
{
if(graph[p][i]==1)
{
if(i == y)///如果深搜到了終點,就輸出剛才經過的路徑
{
for(j=0; j<m; j++)
{
printf("%-5d", stack[j]);
}
printf("%-5d\n", y);
}
else///如果該點不是終點
{
graph[p][i] = 0;
stack[m] = i;///將該點存起來
m++;
dfs(i);///接著深搜
graph[p][i] = 1;
m--;
}
}
}
}

int main()
{
int i, j, t;

scanf("%d", &n);
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
{
scanf("%d", &t);
graph[i][j] = t;
}
}
scanf("%d %d", &x, &y);
stack[0] = x;
dfs(x);
}

留言