求助#6 WA了,有大佬看看嘛
  • 板块P1162 填涂颜色
  • 楼主91xrz
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/4/5 22:50
  • 上次更新2023/10/23 19:18:00
查看原帖
求助#6 WA了,有大佬看看嘛
835857
91xrz楼主2023/4/5 22:50
#include <bits/stdc++.h>

using namespace std;
const int N = 40;
//typedef pair<int, int> PII;
//#define x first
//#define y second
int  map1[N][N]; //迷宫
int dx[4]{ 0,-1,0,1 };
int dy[4]{ -1,0,1,0 };
int n, m;
void bfs(int x, int y)
{

	map1[x][y] = 2;
	for (int i = 0; i < 4; i++)
	{
		int xx = x + dx[i];
		int yy = y + dy[i];
		if(xx > 0 && xx <= n && yy > 0 && yy <= n&&map1[xx][yy]==1)
			continue;
		if (xx > 0 && xx <= n && yy > 0 && yy <= n && map1[xx][yy] == 0)
		{
			bfs(xx, yy);

		}

	}

	return;
}


	int main()
	{
		cin >> n ;
		for (int i = 1; i <= n; i++)
			for (int j = 1; j <= n; j++)
				cin >> map1[i][j];


		for (int i = 1; i <= n; i++)
			for (int j = 1; j <= n; j++)
				if (map1[i][j] == 0)//判断该点是否在闭合圈外面
				{
					int l1 = i - 1;
					int l2 = n - i;
					int r1 = j - 1;
					int r2 = n - j;
					int c = 0;
					for (int k=1;k<=l1;k++)
						if (map1[i-k][j] == 1)
						{
							c++;
							break;
						}
					for (int k=1;k<=l2;k++)
						if (map1[i+k][j] == 1)
						{
							c++;
							break;
						}
					for (int k=1; k <=r1; k++)
						if (map1[i][j-k] == 1)
						{
							c++;
							break;
						}
					for (int k=1;k<=r2;k++)
						if (map1[i][j+k] == 1)
						{
							c++;
							break;
						}
					if (c == 4)
					{
						bfs(i, j);
						break;
					}
				}

		for (int i = 1; i <= n; i++)
			for (int j = 1; j <= n; j++)
			{
				cout << map1[i][j] << " ";
				if (j == n)cout << endl;
			}
	}












2023/4/5 22:50
加载中...