简单的BFS

洛谷P1162
题意是1是围墙,围墙内的0变2,围墙外的不变。
0 0 0 0 0 0
0 0 1 1 1 1
0 1 1 0 0 1
1 1 0 0 0 1
1 0 0 0 0 1
1 1 1 1 1 1
变成下面的
0 0 0 0 0 0
0 0 1 1 1 1
0 1 1 2 2 1
1 1 2 2 2 1
1 2 2 2 2 1
1 1 1 1 1 1
思路:
那我们可以在外面矩阵加一圈0,然后把外墙外的0走一遍并记录下来,遇到围墙就不走了,然后输出把没走过的0变成2(围墙内的0);
这个是上左下右
int xx[] = {1,0,-1,0};
int yy[] = {0,-1,0,1};
写不顺手,下面的也可以
(x+1,y) 向上
(x,y-1)向左
` (x-1,y) 向下
(x,y+1) 向上

我们建立的两个站,判断x,y都可以。
` while (!x.empty())
也可以
while (!y.empty())

#include
#include
#include
using namespace std;

#define ma 40
int n;
bool vis [ma][ma];
int a [ma][ma];
int xx[] = {1,0,-1,0};
int yy[] = {0,-1,0,1};
int main ()
{
cin >>n;
for (int i=1; i<=n; i++)
for (int k=1; k<=n; k++)
cin >> a[i][k];
queue x;
queue y;
vis [0][0]=1;
x.push(0);
y.push(0);
while (!x.empty())
{
for (int i=0; i<n; i++)
{
{
int dx=x.front ()+xx[i];
int dy=y.front ()+yy[i];
if(dx>=0&&dx<=n+1&&dy>=0&&dy<=n+1&&!vis[dx][dy]&&a[dx][dy]==0)
{
x.push (dx);
y.push (dy);
vis [dx][dy]=1;
}
}
}
x.pop();
y.pop();
}
for (int i=1; i<=n; i++)
{
for (int k=1; k<=n; k++)
{
if(!vis[i][k]&&a[i][k]==0)
{
cout << 2 <<’ ‘;
}
else
cout << a[i][k] <<’ ';
}
cout << endl;
}
return 0;
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值