模擬+灌水——填塗顏色

題目來源


洛谷P1162填塗顏色

https://www.luogu.org/problem/show?pid=1162


思路


由於方陣中只有一個閉合圈 所以所有不在圈中的空間都可以從方陣外部到達

所以可以用從外部模擬灌水的方法 所有可以從外部不能到達的空間即爲圈內空間

從外部進行深搜 標記可以到達的點(圈外點)爲2 則圈邊沿仍爲1 圈內仍爲0

輸出時 根據題目要求 圈外點爲0 圈邊沿爲1 圈內爲0

所以輸出(2-該點標記)即可


代碼(C++)


#include <cstdio>
using namespace std;
int n,k[35][35];
int mx[5]={0,-1,0,0,1},my[5]={0,0,-1,1,0};
inline void search(int x,int y);
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;++i)
		for(int j=1;j<=n;++j)
			scanf("%d",&k[i][j]);
	for(int i=1;i<=n;++i)
		if(k[1][i]==0)
			search(1,i);
	for(int i=2;i<n;++i)
	{
		if(k[i][1]==0)
			search(i,1);
		if(k[i][n]==0)
			search(i,n);
	}	
	for(int i=1;i<=n;++i)
		if(k[n][i]==0)
			search(n,i);
	for(int i=1;i<=n;++i)
	{
		for(int j=1;j<=n;++j)
			printf("%d ",2-k[i][j]);
		printf("\n");
	}
	return 0;
}
inline void search(int x,int y)
{
	k[x][y]=2;
	for(int i=1;i<=4;++i)
	{
		int xx=x+mx[i],yy=y+my[i];
		if(xx<=0||yy<=0||xx>n||yy>n||k[xx][yy]!=0)
			continue;
		search(xx,yy);
	}
}


發佈了57 篇原創文章 · 獲贊 39 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章