#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