日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

洛谷p1162填涂颜色(dfs写法)

發布時間:2023/11/27 生活经验 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 洛谷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写法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。