标签:des style blog http color java os io
Time Limit: 2000 MS Memory Limit: 65536 KB
64-bit integer IO format: %I64d , %I64u Java class name: Main
Special Judge
1 103000509 002109400 000704000 300502006 060000050 700803004 000401000 009205800 804000107
143628579 572139468 986754231 391542786 468917352 725863914 237481695 619275843 854396127
#include<iostream> #include <string.h> #include <stdio.h> using namespace std; int map[10][10]; //九宫格 bool row[10][10]; //row[i][x] 标记在第i行中数字x是否出现了 bool col[10][10]; //col[j][y] 标记在第j列中数字y是否出现了 bool grid[10][10]; //grid[k][x] 标记在第k个3*3子格中数字z是否出现了 //(这里说明的字母不代表下面程序中的变量) bool DFS(int x,int y) ///从左到右 上到下 { if(x==10) return true; bool flag=false; if(map[x][y]) { if(y==9) ///右边界的列 flag=DFS(x+1,1); else flag=DFS(x,y+1); if(flag) //回溯 return true; else return false; } else { int k=3*((x-1)/3)+(y-1)/3+1; for(int i=1; i<=9; i++) //枚举数字1~9填空 if(!row[x][i] && !col[y][i] && !grid[k][i]) { map[x][y]=i; row[x][i]=true; col[y][i]=true; grid[k][i]=true; if(y==9) flag=DFS(x+1,1); else flag=DFS(x,y+1); if(!flag) //回溯,继续枚举 { map[x][y]=0; row[x][i]=false; col[y][i]=false; grid[k][i]=false; } else return true; } } return false; } int main() { int t; int i,j; cin>>t; while(t--) { char MAP[10][10]; for(i=1; i<=9; i++) { for(j=1; j<=9; j++) { //scanf("%c",&map[i][j]); cin>>MAP[i][j]; map[i][j]=MAP[i][j]-‘0‘; } } memset(row,false,sizeof(row)); memset(col,false,sizeof(col)); memset(grid,false,sizeof(grid)); for(int i=1; i<=9; i++) { for(int j=1; j<=9; j++) { if(map[i][j]) { int k=3*((i-1)/3)+(j-1)/3+1; row[i][ map[i][j] ]=true; col[j][ map[i][j] ]=true; grid[k][ map[i][j] ]=true; } } } DFS(1,1); for(i=1; i<=9; i++) { for(j=1; j<=9; j++) printf("%d",map[i][j]); printf("\n"); } } return 0; }
poj 2676 如何填满九宫格,布布扣,bubuko.com
标签:des style blog http color java os io
原文地址:http://www.cnblogs.com/zhangying/p/3918723.html