// 说实话,哥挺喜欢这种能够简单yy的题目,更何况多解,但是水题做多了,也没用啊,从没切过非水题的题啊~~
 1 Source Code
2
3 Problem: 1659 User: eth1
4 Memory: 736K Time: 16MS
5 Language: G++ Result: Accepted
6
7 Source Code
8 #include <iostream>
9 #include <cstring>
10 using namespace std;
11 int f[25],vis[15][15],m,flag,check[15];
12 void solve(int w,int k) // w , k
13 {
14 if(flag) return;
15 if(w==m)
16 {
17 flag=1;
18 cout<<"YES"<<endl;
19 for(int i=0;i<m;i++)
20 {
21 for(int j=0;j<m-1;j++)
22 {
23 cout<<vis[i][j]<<' ';
24 }
25 cout<<vis[i][m-1]<<endl;
26 }
27 cout<<endl;
28 return;
29 }
30 for(int i=0;i<m;i++)
31 {
32 if(vis[w][i] || vis[i][w] && w!=i) k++;
33 }
34 if(k==f[w]){
35 check[w]=1;
36 solve(w+1,0);
37 check[w]=0;
38 }
39 else
40 {
41 for(int i=0;i<m;i++)
42 {
43 if(!vis[w][i] && w!=i && !check[i])
44 {
45 vis[w][i]=vis[i][w]=1;
46 solve(w,0);
47 vis[w][i]=vis[i][w]=0;
48 }
49 }
50 }
51 }
52 int main()
53 {
54 int n;
55 cin>>n;
56 while(n--)
57 {
58 //int m;
59 cin>>m;
60 for(int i=0;i<m;i++)
61 cin>>f[i];
62 flag=0;
63 memset(vis,0,sizeof(vis));
64 memset(check,0,sizeof(check));
65 solve(0,0);
66 if(!flag) cout<<"NO"<<endl<<endl;
67 }
68 return 0;
69 }
 posted on 2011-05-12 19:20  eth0  阅读(138)  评论(0编辑  收藏  举报