我的代码一直不正确,不知道错在哪儿了,也尝试输出中间结果查看错误,中间结果显示有的路径没有探测,不知道怎么回事?
我的代码:
#include<iostream>
using namespace std;
int sx,sy;
int ex,ey;
int n,m,T;
int i,j,k;
int flag;//是否成功标记
char maze[10][10];
int vis[10][10];
int d[4][2] = {{0,-1},{0,1},{-1,0},{1,0}};
//判断坐标(x,y)是否在界内
int IsRight(int x,int y)
{
if(0<=x && x<n && 0<=y && y<m)
return 1;
else return 0;
}
void dfs(int x,int y,int t)
{
if(!IsRight(x,y))//坐标不再界内
return;
if( x==ex && y==ey && t == T)
{
flag = 1;
cout << t << endl;
return;
}
for(i=0;i<4;i++)//从4个方向探测
{
int newx = x + d[i][0];
int newy = y + d[i][1];
if(IsRight(newx,newy))
{
if(maze[newx][newy]!='X' && vis[newx][newy]==0)
{
vis[newx][newy]=1;
dfs(newx,newy,t+1);
vis[newx][newy]=0;//回溯
}
}
}
}
int main()
{
freopen("in.txt","r",stdin);
while(1)
{
cin >> n >> m >> T;
if(n==0 && m==0 && T==0)
break;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
vis[i][j] = 0;
cin >> maze[i][j];
if(maze[i][j]=='S')
sx=i , sy=j;
if(maze[i][j]=='D')
ex=i , ey=j;
}
}
int t = 0;
flag = 0;
dfs(sx,sy,t);
if(flag==1)
cout << "YES" << endl;
else
cout << "NO" << endl;
}
return 0;
}
**************************************************************************************************************************************
请教各位大神
