小菜鸟实在不知道哪里有问题 路过的大佬帮帮忙
#include<iostream>
#include<cmath>
using namespace std;
int n,m,t;
int flag=0;
int s_x,s_y,e_x,e_y;
char a[20][20];
int dir[4][2]={0,1,0,-1,1,0,-1,0};
void dfs(int x,int y,int s)
{
int i,tem,n_x,n_y;
if(x==e_x && y==e_y && s==t)
{
flag=1;
return ;
}
tem=t-s-abs(e_x-x)-abs(e_y-y);
if(tem%2!=0) return;
for(i=0;i<4;i++)
{
x=x+dir[i][0];
y=y+dir[i][1];
if(x>=0 &&x<n && y>=0 && y<m && a[x][y]!='X')
{
a[x][y]='X';
/* for(int i=0;i<n;i++){
for(int j=0;j<m;j++)
cout<<a[i][j]<<" ";
cout<<endl;}
cout<<s+1<<endl;*/
dfs(x,y,s+1);
a[x][y]='.';
}
}
return;
}
int main(){
while(cin>>n>>m>>t&&n&&m&&t){
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{cin>>a[i][j];
if(a[i][j]=='S')
{s_x=i;//标记起始坐标
s_y=j;}
if(a[i][j]=='D')
{
e_x=i;//标记门的坐标
e_y=j;
}
}
flag=0;
a[s_x][s_y]='X';
dfs(s_x,s_y,0);//给深搜付初值 起点和步数
if(flag)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
#include<cmath>
using namespace std;
int n,m,t;
int flag=0;
int s_x,s_y,e_x,e_y;
char a[20][20];
int dir[4][2]={0,1,0,-1,1,0,-1,0};
void dfs(int x,int y,int s)
{
int i,tem,n_x,n_y;
if(x==e_x && y==e_y && s==t)
{
flag=1;
return ;
}
tem=t-s-abs(e_x-x)-abs(e_y-y);
if(tem%2!=0) return;
for(i=0;i<4;i++)
{
x=x+dir[i][0];
y=y+dir[i][1];
if(x>=0 &&x<n && y>=0 && y<m && a[x][y]!='X')
{
a[x][y]='X';
/* for(int i=0;i<n;i++){
for(int j=0;j<m;j++)
cout<<a[i][j]<<" ";
cout<<endl;}
cout<<s+1<<endl;*/
dfs(x,y,s+1);
a[x][y]='.';
}
}
return;
}
int main(){
while(cin>>n>>m>>t&&n&&m&&t){
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{cin>>a[i][j];
if(a[i][j]=='S')
{s_x=i;//标记起始坐标
s_y=j;}
if(a[i][j]=='D')
{
e_x=i;//标记门的坐标
e_y=j;
}
}
flag=0;
a[s_x][s_y]='X';
dfs(s_x,s_y,0);//给深搜付初值 起点和步数
if(flag)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}return 0;
}
}