八皇后问题(输出所有情况,不过有些结果只是旋转了90度而已)。哈哈:)回溯算法的典型例题
【正确答案】#define N 8
int Board[N][N];
int Valid(int i, int j) // 所下棋子有效性的严正
{
int k = 1;
for(k=1; i>=k && j>=k;k++)
if(Board[i-k][j-k]) return 0;
for(k=1; i>=k;k++)
if(Board[i-k][j]) return 0;
for(k=1; i>=k && j+k<N;k++)
if(Board[i-k][j+k]) return 0;
return 1;
}

void Trial(int i, int n)
{
if(i==n){
for(int k=0; k<n; k++){
for(int m=0; m<n; m++)
printf("%d ", Board[k][m]);
printf("/n");
}
printf("/n");
}else{
for(int j=0; j<n; j++){
Board[i][j] = 1;
if(Valid(i,j))
Trial(i+1, n);
Board[i][j] = 0;
}
}
}

int main(int argc, char* argv[])
{
Trial(0, N);
return getchar();
}
【答案解析】