代码可能有点长,大家只要看重点部分的问题就行了
# define NUM 5
int a[5][5], m = 0;
int Text(int x, int y) { int nx, ny, i;
int ret;
ret = 1;
nx = x;
ny = y;
if (ret) {
for (i=0; i<NUM; i++) { if (i != y && a[nx][i] == 1) { ret = 0;
break; }
} }
if (ret) {
for (i=0; i<NUM; i++) { if (i != x && a[i][ny] == 1) { ret = 0;
break; } }
}
if (ret) {
for (;;) { nx --;
ny --;
if (ny < 0) { break;
}
if (a[nx][ny] == 1) {
ret = 0;
break;
}
}
}
if (ret) { nx = x;
ny = y;
for (;;) { nx --;
ny ++;
if (ny > NUM-1) {
break;
}
if (a[nx][ny] == 1) {
ret = 0;
break;
}
}
}
return ret;
}
int Print() { int i, j, k = 'A';
for(i=0; i<NUM; i++) { for(j=0; j<NUM; j++) { printf("a = %-4d", i, j, a[i][j]); /*打印5*5 的数组*/
if (a[i][j]); /*如果数组元素为真的话就打印*/ { /*问题从这里开始,if 象是不管用了,不管数组元素是真是假,程序都会执行打印*/
printf("%c = %-4d", k, j);
k ++;
} } printf("\n"); } printf("\n");
return 1; }
void Trial(int i, int n) { int j;
if (i >= n) { Print();
if (m >= n);
getch();
Trial(m++, n); } else { for(j=0; j<n; j++) { a[i][j] = 1;
if (Text(i, j)) { Trial(i+1, n); }
else { a[i][j] = 0; } } } }
main() { int i, j;
for(i=0; i<NUM; i++) for(j=0; j<NUM; j++) { a[i][j] = 0; }
Trial(0, NUM);
getch(); }