数独:
http://poj.org/problem?id=2676
解法一:回溯
#include<string.h>
#include<stdio.h>
#include<iostream>
using namespace std;
int a[15][15],used_x[10][10],used_y[15][15],gezi[15][15],flag=0,ok;
char ch[15][15];
void dfs(int x,int y)
{
int i,j;
if(x==9){
if(ok)
for(i=0;i<9;i++){
for(j=0;j<9;j++)cout<<a[i][j];
cout<<endl;
}
ok=0;
flag=1 ;//dayin
}
if(flag)return ;
if(a[x][y])
{
if(y==8)dfs(x+1,0);
else dfs(x,y+1);
if(flag)return ;
}
else{
int temp; temp=x/3*3+y/3;
for(i=1;i<=9;i++){
if(!used_x[x][i] && !used_y[y][i] && !gezi[temp][i]){
used_x[x][i]=used_y[y][i]=gezi[temp][i]=1; a[x][y]=i;
dfs(x,y);
if(flag)return ;
a[x][y]=used_x[x][i]=used_y[y][i]=gezi[temp][i]=0;
}
}
}
}
int main()
{
int t;
cin>>t;
while(t--)
{
int i,j;
ok=1;
flag=0;
memset(used_x,0,sizeof(used_x));
memset(used_y,0,sizeof(used_y));
memset(gezi,0,sizeof(gezi));
for(i=0;i<9;i++)for(j=0;j<9;j++)
{
cin>>ch[i][j];
a[i][j]=ch[i][j]-'0';
if(a[i][j])
{
int temp; temp=i/3*3 + j/3;
used_x[i][a[i][j]]=used_y[j][a[i][j]]=gezi[temp][a[i][j]]=1;
}
}
dfs(0,0);
// for(i=0;i<9;i++){for(j=0;j<9;j++)cout<<used_x[i][j];cout<<endl;}
}
return 0;
}
解法二:dlx