//杭电ACM 1175
//连连看
#include<iostream>
using namespace std;
int board[1000][1000];
void swap(int&a,int&b)
{
int temp=a;
a=b;
b=temp;
}
bool judge(int h1,int l1,int h2,int l2,int n1,int m1)
{
int i,j,k,t;
if(h1==h2)
{
for(i=l1+1;i<l2;i++)
if(board[h1][i])
break;
if(i==l2)
return true;
}
if(l1==l2)
{
for(i=h1+1;i<l2;i++)
if(board[i][l2])
break;
if(i==h2)
return true;
}
for(k=1;k<=n1;k++)
{
for(i=l1+1;i<l2;i++)
if(board[k][i])
break;
if(i==l2)
{
if(k<h2)
{
for(j=h2-1;j>=k;j--)
if(board[j][l2])
{
j=-1;
break;
}
j++;
}
else
{
for(j=h2+1;j<=k;j++)
if(board[j][l2])
{
j=-1;
break;
}
j--;
}
if(k<h1)
{
for(t=h1-1;t>=k;t--)
if(board[t][l1])
{
t=-1;
break;
}
t++;
}
else
{
for(t=h1+1;t<=k;t++)
if(board[t][l1])
{
t=-1;
break;
}
t--;
}
if((j==k)&&(t==k))
return true;
}
}
for(k=1;k<=m1;k++)
{
if(h1<h2)
{
for(i=h1+1;i<h2;i++)
if(board[i][k])
break;
}
else
{
for(i=h2+1;i<h1;i++)
if(board[i][k])
break;
}
if((i==h2)||(i==h1))
{
if(k<l2)
{
for(j=l2-1;j>=k;j--)
if(board[h2][j])
{
j=-1;
break;
}
j++;
}
else
{
for(j=l2+1;j<=k;j++)
if(board[h2][j])
{
j=-1;
break;
}
j--;
}
if(k<l1)
{
for(t=l1-1;t>=k;t--)
if(board[h1][t])
{
t=-1;
break;
}
t++;
}
else
{
for(t=l1+1;t<=k;t++)
if(board[h1][t])
{
t=-1;
break;
}
t--;
}
if((j==k)&&(t==k))
return true;
}
}
return false;
}
int main()
{
int m,n,a,q,x1,y1,x2,y2;
cout<<"输入n和m: ";
while(cin>>n>>m&&(n+m))
{
cout<<"输入"<<n<<"行"<<m<<"列数字: "<<endl;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
cin>>a;
board[i][j]=a;
}
cout<<"输入询问的次数: ";
cin>>q;
cout<<"输入"<<q<<"行"<<"每行四个数: "<<endl;
for(i=0;i<q;i++)
{
cin>>x1>>y1>>x2>>y2;
if(y1>y2)
{
swap(y1,y2);
swap(x1,x2);
}
if(judge(x1,y1,x2,y2,n,m)&&board[x1][y1]==board[x2][y2]&& board[x1][y1])
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
}
return 0;
}
杭电ACM 1175
最新推荐文章于 2020-02-28 14:30:00 发布