【发布时间】:2015-06-01 17:27:42
【问题描述】:
给定一个 n x n 矩阵作为输入,我们必须找出从 (0,0) 到 X(矩阵中间)的 1 的路径是否存在。例如输入是
1 1 1 0 0
1 0 0 0 0
1 0 X 1 1
1 0 0 0 1
1 1 1 1 1
输出应该为真,因为我们有这条路径
1
1
1 X 1 1
1 1
1 1 1 1 1
有人可以解释一下更好的方法吗?谢谢。这是我的算法:
输入矩阵是 A,其中 X 由任何正数表示 访问的矩阵[n][n] 被初始化为零 最初标志=0; 调用 find(0,0,&flag) 然后我们检查 flag=1 是否存在路径。
void find(int i,int j,int * flag)
{
visited[i][j]=1;
if(i==n/2)and(j==n/2)
{
*flag=1;
return
}
if(A[i+1][j]>0)and(visited[i+1]==0)and(i+1<n)
find(i+1,j,flag);
if(A[i-1][j]>0)and(visited[i-1]==0)and(i-1>0)
find(i-1,j,flag);
if(A[i][j+1]>0)and(visited[j+1]==0)and(j+1<n)
find(i,j+1,flag);
if(A[i][j-1]>0)and(visited[j-1]==0)and(j-1>0)
find(i,j-1,flag);
}
【问题讨论】:
-
是什么让你说它是指数级的?请张贴代码。