题目大概是这样的:输入N A B,N为城市个数,A为起始城市标识,B为目标城市标识。接着输入N行,每行N个数字(0或者1)表示该行所标识的城市是否有到其他城市的路径。
输出从A到B的路径条数。
以下代码在VC++6.0运行通过。
#include <iostream>
#include <string>
#include <vector>
#include <math.h>
using namespace std;
#define for if (0); else for
int path = 0;
int **p;
int **q;
int main ()
{
int n,a,b;
int findpath(int n, int a, int b);
cin>>n>>a>>b;
p = new int*[n];
for(int i=0; i<n; ++i)
p[i] = new int[n];
q = new int*[n];
for(int i=0; i<n; ++i)
q[i] = new int[n];
for(int i=0; i<n; ++i)
for(int j=0; j<n; ++j)
q[i][j]=0;
for(int i=0; i<n; ++i)
for(int j=0; j<n; ++j)
cin>>p[i][j];
findpath(n,a,b);
cout<<path;
return 0;
}
int findpath(int n, int a, int b) {
for(int i=0; i<n; ++i)
{
if(!q[i][a]) {
if(a!=i && p[a][i]==1)
{
q[i][a]=1;
if(i==b)
++path;
else
findpath(n,i,b);
}
}
}
return 0;
}