题目大意 判断两点间是否存在转折点不超过2的路径
思路 路径查找可用dfs。。。。在dfs函数中另加两个参数 dir len来判断是否转折和转折点是否超过2
#include<iostream>
using namespace std;
int A[1010][1010],a,b,c,d,dx[]={1,-1,0,0},dy[]=
{0,0,1,-1},n,m;
bool ans;
void dfs(int x,int y,int dir,int len){
int ux,uy,i;
if(len>2) return;
else{
if(x==c&&y==d) ans=true;
else{
for(i=0;i<=3;i++){
ux=x+dx[i];
uy=y+dy[i];
if(A[ux][uy]==0&&ux>0&&uy>0
&&ux<=n&&uy<=m){
A[ux][uy]=-1;
if(i!=dir) dfs(ux,uy,i,len+1);
else dfs(ux,uy,i,len);
A[ux][uy]=0;
}
}
}
}
}
int main(){
int i,j,N;
while(cin>>n&&cin>>m&&n&&m){
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
cin>>A[i][j];
}
}
cin>>N;
for(i=1;i<=N;i++){
cin>>a>>b>>c>>d;
if(A[a][b]!=A[c][d]||A[a][b]==0)
cout<<"NO"<<endl;
else{
ans=false;
A[c][d]=0;
dfs(a,b,-1,-1);
if(ans) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
A[c][d]=A[a][b];
}
}
}
return 0;
}