#include "stdio.h" #define N 8 int xxx; int data[N]; void print(void) { int map[N][N]; int i, j; for(i = 0; i < N; i++) for(j = 0; j < N; j++) map[i][j] = 0; for(i = 0; i < N; i++) map[i][data[i]] = 1; printf("/n第%d个答案是:/n",++xxx); for(i = 0; i < N; i++) { for(j = 0; j < N; j++) { if(map[i][j]) printf(" 1"); else printf(" 0"); } printf("/n"); } } int abs(int x, int y) { if(x > y) return (x-y); else return (y-x); } int ok(int i, int j) { if(i == 0) return 1; else { int x; for(x = 0; x < i; x++) { if(data[x] == j) return 0; if(abs(data[x],j) == abs(x,i)) return 0; } } return 1; } int main() { int i, j, s; i = 0; for(; ; ) { s = 0; for(j = 0; j < N; j++) { if(ok(i,j)) { data[i] = j; s = 1; i++; break; } } if(s == 0) { int a, b; loop: b = 1; i--; if(i < 0) goto end; a = data[i]+1; data[i] = 0; while(a < N) { if(ok(i,a)) { data[i] = a; b = 0; i++; break; } a++; } if(b) goto loop; } if(i == N) { print(); printf("/n"); goto loop; } } end: return 0; }