洛谷p1162填涂颜色(dfs写法)
生活随笔
收集整理的這篇文章主要介紹了
洛谷p1162填涂颜色(dfs写法)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這道題本是放在試煉場bfs里的,但是我覺得dfs好寫些
所以就用dfs過了
題目如下
題目描述
由數字0 組成的方陣中,有一任意形狀閉合圈,閉合圈由數字1構成,圍圈時只走上下左右4個方向。現要求把閉合圈內的所有空間都填寫成2.例如:6X6的方陣(n=6),涂色前和涂色后的方陣如下:
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 輸入輸出格式
輸入格式:
?
每組測試數據第一行一個整數:n。其中n(1<=n<=30)
接下來n行,由0和1組成的nXn的方陣。
方陣內只有一個閉合圈,圈內至少有一個0。
輸出格式:
已經填好數字2的完整方陣。
輸入輸出樣例
輸入樣例#1:6 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輸出樣例#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都變為2
然后從外圍dfs
把遇到的2變為0
輸出時遇到2變為0遇到0變為2
代碼如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
const int maxn = 105;
int s[maxn][maxn];
int a[maxn][maxn];
int n;
int fx[6]={0,-1,1,0,0};
int fy[6]={0,0,0,-1,1};
void dfs(int x,int y){if(x < 0 || x > n || y < 0|| y > n ||a[x][y] != 0) return;a[x][y]=1;for(int i = 1;i <= 4;i++) dfs(x+fx[i],y+fy[i]);
}
int main(){cin>>n;for(int i = 1;i <= n;i++)for(int j = 1;j <= n;j++){cin>>s[i][j];if(s[i][j] != 0) a[i][j] = 2;}for(int i = 1;i <= n;i++){ //從邊上的每個位置都bfs防止有特殊數據dfs(1,i);dfs(i,1);dfs(n,i);dfs(i,n);}//cout<<endl;for(int i = 1;i <= n;i++){for(int j = 1;j <= n;j++){//cout<<a[i][j]<<" ";if(a[i][j] == 1) cout<<0<<" ";if(a[i][j] == 2) cout<<1<<" ";if(a[i][j] == 0) cout<<2<<" ";}cout<<endl;}return 0;
}
轉載于:https://www.cnblogs.com/breast/p/7521959.html
總結
以上是生活随笔為你收集整理的洛谷p1162填涂颜色(dfs写法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 劫掠梦魇现在多少钱
- 下一篇: 雪诺换可爱双边发亏吗