HDU - 1175 连连看
“连连看”相信很多人都玩过。没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子。如果某两个相同的棋子,可以通过一条线连起来(这条线不能经过其它棋子),而且线的转折次数不超过两次,那么这两个棋子就可以在棋盘上消去。不好意思,由于我以前没有玩过连连看,咨询了同学的意见,连线不能从外面绕过去的,但事实上这是错的。现在已经酿成大祸,就只能将错就错了,连线不能从外围绕过。 玩家鼠标先后点击两块棋子,试图将他们消去,然后游戏的后台判断这两个方格能不能消去。现在你的任务就是写这个后台程序。 Input 输入数据有多组。每组数据的第一行有两个正整数n,m(0
int m,n,i,j,dis[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
while(cin>>m>>n&&m>0&&n>0)
{
for(i=1;i
cin>>a[i][j];
}
}
int q;
cin>>q;
while(q--)
{
int k1,k2,t1,t2;
int arr=0;
cin>>k1>>t1>>k2>>t2;
if(a[k1][t1]!=a[k2][t2]||a[k1][t1]==0||a[k2][t2]==0||(k1==k2&&t1==t2))
{
printf("NO\n");
continue;
}
for(i=1;i
ma[i][j]=a[i][j];
}
}
queues;
weizhi start;
start.x=k1,start.y=t1;
s.push(start);
while(s.size())
{
weizhi b,d;
b=s.front();
s.pop();
for(i=0;i
continue;
}
if(b.x!=k1||b.y!=t1)
{
if((d.x-b.x)!=(b.x-b.x1)||(d.y-b.y)!=(b.y-b.y1))
{
d.ans=b.ans+1;
}
else d.ans=b.ans;
}
if(d.x>=1&&d.x=1&&d.y
arr=1;
while(s.size())
{
s.pop();
}
break;
}
}
}
if(arr==1)
printf("YES\n");
else if(arr==0)
printf("NO\n");
}
}
}
|