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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

地图的四着色 (CSU-1508)

發布時間:2025/3/17 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 地图的四着色 (CSU-1508) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

描述

有一個R行C列的網格地圖,每個國家是一個四連通區域。你的任務是用紅,綠,藍,黃四種顏色給地圖著色,使得相鄰國家的顏色不同。
一個人著色比較無趣,所以你想請女朋友陪你一起涂——你涂紅綠,她涂藍黃。當然,紳士是不會讓讓女朋友受累的,所以她最多只需涂5個國家(恰好5個也行)。
你的任務是統計有多少種著色的方法。注意,每個顏色都至少要用一次。

輸入

輸入包含不超過100組數據。每組數據第一行為兩個整數R和C (1<=R,C<=20),即網格的行數和列數。以下R行每行C個大寫字母。相同字母所組成的四連通區域代表一個國家。輸入保證國家數目不超過30,并且大多數測試點的國家數都比較小。

輸出

對于每組數據,輸出測試點編號和著色方案數。

樣例輸入

2 4
AABB
BBAA
1 5
ABABA
4 7
AABAABB
ABBCCCB
BBAACBB
CCABBAC

樣例輸出

Case 1: 24
Case 2: 144
Case 3: 3776

思路:

以樣例一為例

首先將給出的字符數組尋找連通塊,將每個四連通的相同字母的每一塊進行標號

即:AABB 轉變為 :0011
? ? ? ?BBAA? ? ? ? ? ? ? ? ?2233

然后進行縮點,將每一塊編號相同的區域作為以這個編號的結點,構建鄰接矩陣,即如果一個編號的四連通區域有其他編號,就說明這兩個點連通

即有:0110
? ? ? ? ? ?1001
? ? ? ? ? ?1001
? ? ? ? ? ?0110

此時有了鄰接矩陣后,可以直接搜索進行染色以統計方案數,但由于數據范圍過大因此會超時,考慮剪枝

假設男性使用 A、B 兩個顏色涂色,女性使用 C、D 兩個顏色涂色,此時男性、女性的涂色順序有四種:AB|CD、AB|DC、BA|CD、BA|DC

由于無論哪個顏色先涂,結果最終都是等價的,因此規定男性使用的第一個顏色是 A,女性使用的第一個顏色是 C,然后進行搜索,最終求出來的 res 是結果的 1/4,因此最終答案為 res*4

源程序

#include<iostream> #include<cstdio> #include<cstdlib> #include<string> #include<cstring> #include<cmath> #include<ctime> #include<algorithm> #include<utility> #include<stack> #include<queue> #include<vector> #include<set> #include<map> #include<bitset> #define EPS 1e-9 #define PI acos(-1.0) #define INF 0x3f3f3f3f #define LL long long const int MOD = 1E9+7; const int N = 2000+5; const int dx[] = {-1,1,0,0,-1,-1,1,1}; const int dy[] = {0,0,-1,1,-1,1,-1,1}; using namespace std; int n,m; char mp[N][N];//字符矩陣 int grade[N][N];//連通塊標號 int G[N][N];//鄰接矩陣 int colors[N]; void dfs(int x,int y,int num){//尋找連通塊記錄標號grade[x][y]=num;for(int i=0;i<4;i++){int nx=x+dx[i];int ny=y+dy[i];if(nx<0||nx>=n||ny<0||ny>=m)continue;if(mp[x][y]==mp[nx][ny]&grade[nx][ny]==-1)dfs(nx,ny,num);} } void buildMap(int num){//建立鄰接矩陣for(int x=0;x<m;x++){for(int y=0;y<num;y++){for(int k=0;k<4;k++){int nx=x+dx[k];int ny=y+dy[k];if(nx<0||ny<0||nx>=num||ny>=num)continue;if(grade[x][y]!=grade[nx][ny]){int nodeX=grade[x][y];int nodeY=grade[nx][ny];G[nodeX][nodeY]=1;G[nodeY][nodeX]=1;}}}} } bool judge(int step,int color,int num){for(int i=0;i<num;i++)if(G[step][i]==1&&colors[i]==color)return false;return true; } int dye(int step,int A,int B,int C,int D,int num){//染色int res=0;if(step==num){if(A!=0&&B!=0&&C!=0&&D!=0)res++;return res;}if(judge(step,0,num)){colors[step]=0;res+=dye(step+1,A+1,B,C,D,num);}if(A&&judge(step,1,num)){colors[step]=1;res+=dye(step+1,A,B+1,C,D,num);}if(C+D<5&&judge(step,2,num)){colors[step]=2;res+=dye(step+1,A,B,C+1,D,num);}if(C&&C+D<5&&judge(step,3,num)){colors[step]=3;res+=dye(step+1,A,B,C,D+1,num);}colors[step]=-1;return res; } int main(){int Case=1;while(scanf("%d%d",&n,&m)!=EOF){for(int i=0;i<n;i++){getchar();for(int j=0;j<m;j++)scanf("%c",&mp[i][j]);}//尋找連通塊,并進行標號memset(grade,-1,sizeof(grade));int num=0;for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(grade[i][j]==-1){dfs(i,j,num++);}}}//建立鄰接矩陣memset(G,0,sizeof(G));buildMap(num);//染色memset(colors,-1,sizeof(colors));int res=dye(0,0,0,0,0,num);printf("Case %d: %d\n",Case++,res*4);}return 0; }

?

總結

以上是生活随笔為你收集整理的地图的四着色 (CSU-1508)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 男人激情网 | 黄网av| 国产精品免费电影 | 国产精品第5页 | 国产爆乳无码一区二区麻豆 | 中文字幕资源在线 | 久久久久亚洲av成人人电影 | 自拍偷拍亚洲欧美 | 日日摸日日碰 | 久久久久久av无码免费网站下载 | 久久精品夜 | 在线免费av播放 | 久久久久一区二区 | 一区二区三区四区免费 | 亚洲国产精品18久久久久久 | 日本在线第一页 | 最新视频 - 88av | 精品无码国产污污污免费网站 | 亚洲黄色片子 | 骚虎av在线 | 艳妇臀荡乳欲伦交换gif | 成年人免费在线 | 久久久123 | 欧美第一页草草影院 | 女儿朋友 | 中国av片| 久久精品国产亚洲av嫖农村妇女 | 免费一区二区在线观看 | 国产农村老头老太视频 | 日中文字幕 | 丁香婷婷久久久综合精品国产 | 免费观看a毛片 | 99爱视频在线观看 | 超碰人人射 | 久久图库 | 欧美在线你懂的 | 亚欧成人 | 日本精品一二三 | 欧美精品一区二区三区四区五区 | 人妻人人澡人人添人人爽 | 日韩三级免费观看 | 污污网站在线 | 日本a∨视频| 国产第四页 | 欧美高清久久 | 粉嫩av一区二区白浆 | 日韩一区二区三区在线视频 | 四季av国产一区二区三区 | 男人都懂的网站 | 久久精品国产亚洲AV无码麻豆 | av一级二级| 亚洲一区二区三区免费观看 | 日日夜夜狠狠爱 | 樱桃香蕉视频 | 国产成人小视频 | 国产精品精品软件视频 | 婷婷丁香一区二区三区 | 日本成人片在线 | 国产极品美女高潮无套在线观看 | 曰韩一级片 | 特黄特色大片免费 | 丰满少妇xbxb毛片日本 | 成人在线不卡 | 亚洲激情视频小说 | 成年人视频网站 | 中文字幕国产精品 | 免费在线观看国产精品 | 视频1区 | 美美女高清毛片视频免费观看 | 黄频视频在线观看 | 99精品欧美一区二区 | 国产99久久久久 | 国产一区色 | 精品三级 | 中文字幕18页 | 色秀视频网 | 国产性生活一级片 | 性欧美精品男男 | 成人毛片在线免费观看 | 国产精品一区免费 | 汗汗视频 | 美女扒开腿让人桶爽 | av噜噜在线 | 亚洲AV无码一区二区伊人久久 | 久久久精品区 | 一区二区三区视频在线观看免费 | 日韩一区二区a片免费观看 伊人网综合在线 | 午夜亚洲福利在线老司机 | 国产激情自拍视频 | 99一级片 | 法国经典free性复古xxxx | 操到喷水| 91女神在线 | 好爽又高潮了毛片 | 久久久久性 | 极品三级| 亚洲午夜精品视频 | 免费的黄色片 | 久操视频免费观看 |