完整代码实现回溯算法实现N皇后问题
#include测试样例#include #include #define true 1 #define false 0 int num=0; int place(int* paraSolution,int paraT) { for(int j=1;j if((abs(paraT-j)==abs(paraSolution[j]-paraSolution[paraT]))||(paraSolution[j]==paraSolution[paraT])) { return false; } } return true; } void backtracking(int* paraSolution, int paraN, int paraT){ int i; if (paraT > paraN){ for (i = 1; i <= paraN; i ++) printf("%d ", paraSolution[i]); num++; printf("rn"); }else{ for (i = 1; i <= paraN; i ++){ paraSolution[paraT] = i; if (place(paraSolution, paraT)) backtracking(paraSolution, paraN, paraT + 1); } } } void nQueue(int paraN) { int i; int* solution=(int*)malloc(sizeof(int)*(paraN+1)); for(i=0;i<=paraN;i++) solution[i]=0; backtracking(solution,paraN,1); } int main() { nQueue(5); printf("The num is %d",num); return 0; }
1 3 5 2 4
1 4 2 5 3
2 4 1 3 5
2 5 3 1 4
3 1 4 2 5
3 5 2 4 1
4 1 3 5 2
4 2 5 3 1
5 2 4 1 3
5 3 1 4 2
The num is 10



