| ||||||||||
| 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 | |||||||||
实不相瞒弱菜学妹 做了两天没做成功..贴上代码,求大神指正,小妹不胜感激#include<iostream>
#include<cstring>
#define N (((x-1)/3)*3+ (y-1)/3+1)
//#define (!book_row[i][j]&&!book_col[i][j]&&!book[N][j])
using namespace std;
int map[10][10];
char _map[10][10];
int bookr[10][10];//进行行的标记
int bookc[10][10];//进行列的标记
int booka[10][10];//进行小块的标记
int flag;
/*怎么判断第i行第j列位于第几块(行主序)是重点;
area=((i-1)/3)*3+ j/3+1;
跑一个:
1 1 1 2 2 2 3 3 3
1 1 1 2 2 2 3 3 3
1 1 1 2 2 2 3 3 3
4 4 4 5 5 5 6 6 6
4 4 4 5 5 5 6 6 6
4 4 4 5 5 5 6 6 6
7 7 7 8 8 8 9 9 9
7 7 7 8 8 8 9 9 9
7 7 7 8 8 8 9 9 9
--------------------------------
Process exited after 0.04042 seconds with return value 0
请按任意键继续. . .
*/
void dfs(int x,int y)
{
if(flag)return;
if(x==9&&y==10)
{
flag=1;
for(int i=1;i<=9;i++)
{
for(int j=1;j<=9;j++)
cout<<map[i][j];
cout<<endl;
}
return;
}
if(x<1||x>9||y<1||y>9)return;
if(map[x][y])
{
//cout<<"x: "<<x<<" y: "<<y<<" map[x][y] "<<map[x][y]<<endl;
dfs(x,y+1);
dfs(x+1,1);
}
int k;
for( k=1;k<=9;k++)
{
if(!bookr[x][k]&&!bookc[y][k]&&!booka[N][k])
{
bookr[x][k]=1;
bookc[y][k]=1;
booka[N][k]=1;
map[x][y]=k;
//cout<<"x: "<<x<<" y: "<<y<<" map[x][y] "<<map[x][y]<<" N: "<<N<<endl;
dfs(x,y+1);
dfs(x+1,1);
bookr[x][k]=0;
bookc[y][k]=0;
booka[N][k]=0;
}
}
}
int main()
{
int t;
cin>>t;
while(t--)
{
flag=0;
memset(bookr,0,sizeof(bookr));
memset(bookc,0,sizeof(bookc));
memset(booka,0,sizeof(booka));
for(int i=1;i<=9;i++)
for(int j=1;j<=9;j++)
{
cin>>_map[i][j];
map[i][j]=_map[i][j]-'0';
if(map[i][j])
{ int x=i;int y=j;
bookr[i][map[i][j]]=1;
bookc[j][map[i][j]]=1;
booka[N][map[i][j]]=1;
// cout<<i<<' '<<j<<" "<<N<<endl;
}
}
dfs(1,1);
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator