n m t
3 4 7
S.X.
..X.
...D
n等于行,m等于列,t为步数,S为起始位置,要在刚好t步到达D。
#include <iostream>
#include <cstring>
using namespace std;
int n,m,t,sum,flag=0;
int x2,y2;
char a[10][10];
int b[10][10];
int xy[][2]={{1,0},{0,1},{-1,0},{0,-1}};
void dfs(int i,int j)
{
int tx,ty,k;
b[i][j]=1;
for (k=0;k<4;++k)
{
tx=i+xy[k][0] ;
ty=j+xy[k][1] ;
if(tx>=0&&tx<n&&ty>=0&&ty<m&&a[tx][ty]!='X'&&b[tx][ty]==0)
{
sum++;
if (sum==t&&x2==tx&&y2==ty)//找到所用步数相等且刚好在‘D’点那里
{
flag=1;
return;
}
dfs(tx,ty);
b[tx][ty]=0 ;//不符合就回溯(不知道有没有用错)
sum--;
}
}
}
int main()
{
int i,j,x1,y1;
while(cin >> n >> m >> t)
{
sum=0;
flag=0;
memset(b,0,sizeof(b));
for(i=0;i<n;++i)
{
cin >> a[i] ;
}
for(i=0;i<n;++i)
{
for (j=0;j<m;++j)
{
if (a[i][j]=='S')
{
x1=i;
y1=j;
}
else if (a[i][j]=='D')
{
x2=i;
y2=j;
}
}
}
dfs(x1,y1);
cout << "sum: " << sum << " flag: " << flag << endl;
for(i=0;i<n;++i)//看一下标记的路径
{
for(j=0;j<m;++j)
{
cout << b[i][j] << " " ;
}
cout << endl;
}
if (flag==1&&sum==t)
{
cout << "Yes" << endl;
}
else
{
cout << "No" << endl;
}
}
return 0;
}
怎样才能实现啊?