您的位置:首页 > 其它

九度 1140 八皇后

2012-02-15 21:23 253 查看
http://ac.jobdu.com/problem.php?id=1140

直接用的USACO上代码,不解释

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int N=8;
bool placed[15][15]={false};
int diagonals_l[50]={0};
int diagonals_r[50]={0};
bool column_ok[15]={true};
int solutions[93]={0};
int cur=1;
bool can_place_queen(int row,int column)
{
int r=row-column;
if(r<0){
r=-1*r+N;
}
if(column_ok[column]&&!placed[row][column]&&diagonals_l[row+column]<1&&diagonals_r[r]<1){
return true;
}
return false;

}
void place_queen(int row)
{
if(row==N+1){
/*deal with output :)
*/
int i,j;
for(i=1;i<=N;i++){
for(j=1;j<=N;j++){
if(placed[i][j]){
solutions[cur]=solutions[cur]*10+j;
break;
}
}
}
cur++;
}

int column;
for(column=1;column<=N;column++){
if(can_place_queen(row,column)){
int l=row+column;
int r=row-column;
if(r<0){
r=-1*r+N;
}
column_ok[column]=false;
placed[row][column]=true;
diagonals_l[l]++;
diagonals_r[r]++;
place_queen(row+1);
diagonals_l[l]--;
diagonals_r[r]--;
placed[row][column]=false;
column_ok[column]=true;
}
}
}
int main()
{
memset(column_ok,true,sizeof(column_ok));
place_queen(1);
int t;
while(scanf("%d",&t)!=EOF){
while(t--){
int n;
scanf("%d",&n);
printf("%d\n",solutions
);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: