hdoj1175 路径查找

来源:互联网 发布:qq输入法 linux 编辑:程序博客网 时间:2024/06/07 01:22

题目大意       判断两点间是否存在转折点不超过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;}


原创粉丝点击