标签:
#include<bits/stdc++.h> using namespace std; int n,m,k; int yy[60]; int g[30][30]; bool jud(int x,int y,int i){ if(x<0||x>=n||y<0||y>=m) return true; if(g[x][y]!=i) return true; return false; } bool Cut(int step) { int le = (n*m-step+1)/2; for(int i=0;i<k;i++) { if(le<yy[i]) return true; } return false; } bool dfs(int x,int y,int step){ if(x==n) return true; if(y==m) return dfs(x+1,0,step); if(Cut(step)) return false; for(int i=0;i<k;i++) if(yy[i]) { int x1=x-1,y1=y; int x2=x,y2=y-1; if( jud(x1,y1,i)&&jud(x2,y2,i) ) { yy[i]--; g[x][y]=i; if(dfs(x,y+1,step+1)) return true; yy[i]++; } } return false; } int main() { int t,kase=0;scanf("%d",&t); while(t--){ memset(g,0,sizeof(g)); scanf("%d%d%d",&n,&m,&k); for(int i=0;i<k;i++) scanf("%d",&yy[i]); printf("Case #%d:\n",++kase); if(dfs(0,0,0)){ printf("YES\n"); for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(j==0) printf("%d",g[i][j]+1); else printf(" %d",g[i][j]+1); } printf("\n"); } } else printf("NO\n"); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/a197p/article/details/48138291