1175
部分代码,关键代码未写
#include<bits/stdc++.h>
using namespace std;
int a[1010][1010],b[1010][1010];
int n,m,q;
struct zuobiao{
int x,y;
int p,q;
}z;
void judge(int z1,int z2){
if()//不知道怎么写
printf("YES\n");
else
printf("NO\n");
}
int main(){
while(scanf("%d%d",&n,&m)&&(m+n)){
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
scanf("%d",&a[i][j]);
getchar();
}
scanf("%d",&q);
for(int k=1;k<=q;k++){
for(int i=1;i<=4;i++)
scanf("%d",&b[k][i]);
z.x=b[k][1],z.y=b[k][2];
z.p=b[k][3],z.q=b[k][4];
judge(a[z.x][z.y],a[z.p][z.p]);
}
}
return 0;
}
应该将“线的转折次数不超过两次”作为条件,再使用dfs。
devc++运行样例都通过,提交显示编译错误
#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int ma[N][N],vis[N][N];
int n,m,q,sx,sy,ex,ey;
int move[][2]={{1,0},{0,1},{-1,0},{0,-1}};
int flag;
bool bound(int x,int y){
if(x<=0||y<=0||x>n||y>m||vis[x][y])
return true;
return false;
}
void dfs(int x,int y,int p,int q){
if(flag||q>2)
return;
if(q==2&&(x!=ex&&y!=ey))
return;
if(x==ex&&y==ey&&q<=2){
flag=1;
return;
}
for(int i=0;i<4;i++){
int tx=x+move[i][0],ty=y+move[i][1];
if(bound(tx,ty))
continue;
if(ma[tx][ty]==0||tx==ex&&ty==ey){
vis[tx][ty]=1;
if(p==-1||p==i)
dfs(tx,ty,i,q);
else
dfs(tx,ty,i,q+1);
vis[tx][ty]=0;
}
}
return;
}
int main(){
while(scanf("%d%d",&n,&m)&&(n+m)){
memset(ma,0,sizeof(ma));
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&ma[i][j]);
scanf("%d",&q);
for(int i=1;i<=q;i++){
scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
memset(vis,0,sizeof(vis));
flag=0;
if(ma[sx][sy]==ma[ex][ey]&&ma[ex][ey])
dfs(sx,sy,-1,0);
if(flag)
printf("YES\n");
else
printf("NO\n");
}
}
return 0;
}
依然Compilation Error
#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int ma[N][N],vis[N][N];
int n,m,q,sx,sy,ex,ey;
int move[][2]={{1,0},{0,1},{-1,0},{0,-1}};
int flag;
bool bound(int x,int y){
if(x<=0||y<=0||x>n||y>m||vis[x][y])
return true;
return false;
}
void dfs(int x,int y,int p,int q){
if(flag||q>2)
return;
if(q==2&&(x!=ex&&y!=ey))
return;
if(x==ex&&y==ey&&q<=2){
flag=1;
return;
}
for(int i=0;i<4;i++){
int tx=x+move[i][0],ty=y+move[i][1];
if(bound(tx,ty))
continue;
if(ma[tx][ty]==0||tx==ex&&ty==ey){
vis[tx][ty]=1;
if(p==-1||p==i)
dfs(tx,ty,i,q);
else
dfs(tx,ty,i,q+1);
vis[tx][ty]=0;
}
}
return;
}
int main(){
while(scanf("%d%d",&n,&m)&&(n+m)){
memset(ma,0,sizeof(ma));
int i,j,k;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
scanf("%d",&ma[i][j]);
scanf("%d",&q);
for(k=1;k<=q;k++){
scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
memset(vis,0,sizeof(vis));
flag=0;
if(ma[sx][sy]==ma[ex][ey]&&ma[ex][ey])
dfs(sx,sy,-1,0);
if(flag)
printf("YES\n");
else
printf("NO\n");
}
}
return 0;
}