| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
贴个17重循环代妈,32ms#include <iostream>
#include <stdio.h>
using namespace std;
char piece[10][4][4];
bool con(int x1, int d1, int x2, int d2){
return piece[x1][d1][0] == piece[x2][d2][0] && piece[x1][d1][1] != piece[x2][d2][1];
}
int main() {
int num;
while(1){
scanf("%d", &num);
if(num == 0) break;
printf("%d:\n", num);
bool used[10] = {0};
for(int i = 1; i <= 9; i++){
int fei;
scanf("%d", &fei);
for(int j = 0; j <= 3; j++) scanf("%s", piece[i][j]);
}
int bh[9];
int dir[9];
bool ky = 0;
for(int i = 1; i <= 9; i++){
used[i] = 1, bh[4] = i, dir[4] = 0;
for(int j = 1; j <= 9; j++){
if(used[j]) continue;
for(int jdir = 0; jdir < 4; jdir++){
if(con(j, (1+jdir)%4, bh[4], 3)){
used[j] = 1, bh[3] = j, dir[3] = jdir;
for(int k = 1; k <= 9; k++){
if(used[k]) continue;
for(int kdir = 0; kdir < 4; kdir++){
if(con(k, (2+kdir)%4, bh[4], 0)){
used[k] = 1, bh[1] = k, dir[1] = kdir;
for(int l = 1; l <= 9; l++){
if(used[l]) continue;
for(int ldir = 0; ldir < 4; ldir++){
if(con(l, (3+ldir)%4, bh[4], 1)){
used[l] = 1, bh[5] = l, dir[5] = ldir;
for(int m = 1; m <= 9; m++){
if(used[m]) continue;
for(int mdir = 0; mdir < 4; mdir++){
if(con(m, mdir, bh[4], 2)){
used[m] = 1, bh[7] = m, dir[7] = mdir;
int unused[4];
int cnt = 0;
for(int z = 1; z <= 9; z++){
if(!used[z]){
unused[cnt] = z;
cnt++;
}
}
for(int P = 0; P < 4; P++){
int p = unused[P];
for(int pdir = 0; pdir < 4; pdir++){
if(!con(p, (1+pdir)%4, bh[1], (3+dir[1])%4)) continue;
if(!con(p, (2+pdir)%4, bh[3], dir[3])) continue;
used[p] = 1, bh[0] = p, dir[0] = pdir;
for(int Q = 0; Q < 4; Q++){
int q = unused[Q];
if(used[q]) continue;
for(int qdir = 0; qdir < 4; qdir++){
if(!con(q, qdir, bh[3], (2+dir[3])%4)) continue;
if(!con(q, (1+qdir)%4, bh[7], (3+dir[7])%4)) continue;
used[q] = 1, bh[6] = q, dir[6] = qdir;
for(int R = 0; R < 4; R++){
int r = unused[R];
if(used[r]) continue;
for(int rdir = 0; rdir < 4; rdir++){
if(!con(r, (3+rdir)%4, bh[7], (1+dir[7])%4)) continue;
if(!con(r, rdir, bh[5], (2+dir[5])%4)) continue;
used[r] = 1, bh[8] = r, dir[8] = rdir;
int s;
for(int y = 0; y < 4; y++){
if(!used[unused[y]]){
s = unused[y];
break;
}
}
for(int sdir = 0; sdir < 4; sdir++){
if(!con(s, (2+sdir)%4, bh[5], dir[5])) continue;
if(!con(s, (3+sdir)%4, bh[1], (1+dir[1])%4)) continue;
used[s] = 1, bh[2] = s, dir[2] = sdir;
ky = 1;
goto done;
}
used[r] = 0;
}
}
used[q] = 0;
}
}
used[p] = 0;
}
}
used[m] = 0;
}
}
}
used[l] = 0;
}
}
}
used[k] = 0;
}
}
}
used[j] = 0;
}
}
}
used[i] = 0;
}
done:
if(!ky){
printf("No Solution\n\n");
continue;
}
//cout << 1 << endl;
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
int tar = 3*i+j;
printf(" %c%c ", piece[bh[tar]][(0+dir[tar])%4][0], piece[bh[tar]][(0+dir[tar])%4][1]);
}
printf("\n");
for(int j = 0; j < 3; j++){
int tar = 3*i+j;
printf("%c%c %d %c%c ", piece[bh[tar]][(3+dir[tar])%4][0], piece[bh[tar]][(3+dir[tar])%4][1], bh[tar], piece[bh[tar]][(1+dir[tar])%4][0], piece[bh[tar]][(1+dir[tar])%4][1]);
}
printf("\n");
for(int j = 0; j < 3; j++){
int tar = 3*i+j;
printf(" %c%c ", piece[bh[tar]][(2+dir[tar])%4][0], piece[bh[tar]][(2+dir[tar])%4][1]);
}
printf("\n\n");
}
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator