/* N皇后问题 回溯法 2014-4-8 11:22:45 */ #include <stdio.h> int a[1000], data[1000], n; bool check(int k){ for(int i = 1; i < k; ++i) if(a[i] == a[k] || i + a[i] == k + a[k] || i - a[i] == k - a[k]) return 0; return 1; } void backTrack(int k){ if(k > n){ for(int i = 1; i < k; ++i) printf("%d ", a[i]); printf("\n"); return; } for(int i = 1; i <= n; ++i){ a[k] = i; if(check(k)){ data[k] = i; backTrack(k + 1); } } } int main(){ scanf("%d", &n); backTrack(1); return 0; }
原文:http://blog.csdn.net/chang_mu/article/details/23176263