5
已采纳
樊澄宇
新手光能
新手光能
思路:用两个搜索
一个判断(x,y)是否可以从0改成2(不与边界接壤,等于0)
另一个把所有与(x,y)相关联的0改成2
然后判断每一个格子:
如果可以从0改成2,则把所有与它相关联的0改成2
核心代码:
第一个搜索:
bool search_pd(int x,int y)
{
if (map[x][y]!=0)
{
if (map[x][y]==-1) return false;
return true;
}
bool flag=true;
for (int i=0;i<4;i++)
{
int nx=x+dir[i][0],ny=y+dir[i][1];
if (!used[nx][ny])
{
used[nx][ny]=true;
flag=search_pd(nx,ny) && flag;
used[nx][ny]=false;
}
}
return flag;
}
第二个搜索:
void search_print(int x,int y)
{
if (map[x][y]!=0) return;
for (int i=0;i<4;i++)
{
int nx=x+dir[i][0],ny=y+dir[i][1];
map[x][y]=2;
search_print(nx,ny);
}
}
对于格子的判断:
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++)
{
if (search_pd(i,j))
{
search_print(i,j);
}
}
}
樊澄宇在2018-01-21 19:15:12追加了内容
不过,希望楼主仅供参考,不要摘抄
0