HDU 5113 Black And White (dfs)
題目連結: 傳送門
題意:
給定你一個n*m的格子,然後k種顏色給這個圖塗色,要求
相鄰的兩個格子的顏色不相同(四個方向),而且第i種顏
色恰好出現c[i]次,問能否給這個圖塗色成功。
分析:
首先我們考慮一種情況,n*m的格子用一種顏色給他塗色,保
證相鄰的格子的顏色不同那麼最多可以塗(m*n+1)/2 ,那麼
我們搜尋的時候可以直接根據這個條件來剪枝了。然後從下
到上一層一層的進行塗色。
程式碼如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <set>
#include <map>
#include <queue>
#define PB push_back
#define MP make_pair
#define REP(i,n) for(int i=0;i<(n);++i)
#define FOR(i,l,h) for(int i=(l);i<=(h);++i)
#define DWN(i,h,l) for(int i=(h);i>=(l);--i)
#define IFOR(i,h,l,v) for(int i=(h);i<=(l);i+=(v))
#define CLR(vis) memset(vis,0,sizeof(vis))
#define MST(vis,pos) memset(vis,pos,sizeof(vis))
#define MAX3(a,b,c) max(a,max(b,c))
#define MAX4(a,b,c,d) max(max(a,b),max(c,d))
#define MIN3(a,b,c) min(a,min(b,c))
#define MIN4(a,b,c,d) min(min(a,b),min(c,d))
#define PI acos(-1.0)
#define INF 1000000000
#define LINF 1000000000000000000LL
#define eps 1e-8
#define LL long long
using namespace std;
const int maxn = 26;
int mp[maxn][maxn];
int c[maxn];
int n,m,k;
bool tag;
bool check(int x,int y,int color){//判斷是否是不同色
bool flag = true;
if(x-1>=1&&mp[x-1][y]==color) flag = false;
if(y-1>=1&&mp[x][y-1]==color) flag = false;
return flag;
}
void dfs(int x,int y,int num){//搜尋到(x,y)剩餘num個格子可以用。
if(tag) return ;
FOR(i,1,k){
if(c[i]>(num+1)/2)
return;
}
if(x==n+1){//可以塗到第n+1層的話那麼很明顯前n層是有解的
tag = true;
puts("YES");
FOR(i,1,n){
FOR(j,1,m){
if(j==m) printf("%d\n",mp[i][j]);
else printf("%d ",mp[i][j]);
}
}
return ;
}
FOR(i,1,k){//列舉可以塗的顏色
if(c[i]&&check(x,y,i)){
c[i]--,mp[x][y]=i;
if(y==m) dfs(x+1,1,num-1);
else dfs(x,y+1,num-1);
c[i]++,mp[x][y]=0;
}
}
}
int main(){
int t,cas=1;
scanf("%d",&t);
while(t--){
scanf("%d%d%d",&n,&m,&k);
FOR(i,1,k) scanf("%d",c+i);
printf("Case #%d:\n",cas++);
tag=false;
dfs(1,1,m*n);
if(!tag) puts("NO");
}
return 0;
}
相關文章
- CF1626E Black and White Tree
- HDU1427速算24點(dfs)
- HDU - 2553 N皇后問題(DFS)
- HDU 1427-速算24點(DFS)
- hdu 6446 Tree and Permutation(dfs+思維)
- CSS white-spaceCSS
- C. Black Circles
- POJ 1442 Black Box
- DFS
- hdu 2111 Saving HDU (DP)
- Black Out for mac (影像模糊工具)Mac
- dfs序
- DFS樹
- dfs技巧
- [Black Watch 入群題]PWN 1
- 使用 Black 自由格式化 PythonPython
- 深搜dfs
- Tempter of the Bone(DFS)
- White Source SAST—資訊保安測試工具AST
- Shape of HDU
- HDU 3349
- DAG bfs + dfs 126,
- 樹的DFS序
- Prime Ring Problem (dfs)
- HDU 2052(C語言+註釋)+HDU 2090C語言
- P5624 [Celeste-A] Black Moonrise 題解
- 如何使用 Black 程式碼格式化工具
- 題解 CF746D 【Green and Black Tea】
- 開放世界冒險 ARPG《Black Skylands》前瞻
- 簡單的揹包問題(入門)HDU2602 HDU2546 HDU1864
- HDU 1240 Asteroids!AST
- hdu2083
- hdu5532
- HDU4787
- hdu5540
- HDU 4921 Map
- HDU 3661 Assignments
- hdu 6415 - DP
- DFS序例題+感受