给定一个方阵,定义连通:上下左右相邻,并且值相同。
可以想象成一张地图,不同的区域被涂以不同颜色。
输入:
整数N, (N<50)表示矩阵的行列数
接下来N行,每行N个字符,代表方阵中的元素
接下来一个整数M,(M<1000)表示询问数
接下来M行,每行代表一个询问,
格式为4个整数,y1,x1,y2,x2,
表示(第y1行,第x1列) 与 (第y2行,第x2列) 是否连通。
连通输出true,否则false
例如:
10
0010000000
0011100000
0000111110
0001100010
1111010010
0000010010
0000010011
0111111000
0000010000
0000000000
程序应该输出:
false
#include<iostream>
using namespace std;
int n;
int mp[100][100];
int dir[4][2]={{1,0},{-1,0},{0,-1},{0,1}};
void dfs(int x,int y)
{
for(int i=0;i<4;i++)
{
int a=x+dir[i][0];
int b=y+dir[i][1];
if((a>=0)&&(a<n)&&(b>=0)&&(b<n)&&!mp[a][b])
{
mp[a][b]=1;
dfs(a,b);
}
}
}
int main()
{
cin>>n;
int x,y;
x=-1;
for(int i=0;i<n;i++)
{
string str;
cin>>str;
for(int j=0;j<n;j++)
{
mp[i][j]=str[j]-'0';
if(mp[i][j]==0&&x!=-1)
{
x=i;
y=j;
}
}
}
dfs(x,y);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(mp[i][j]==0)
{
cout<<"false"<<endl;
return 0;
}
}
}
cout<<true;
return 0;
}