递归方式N皇后
| #include<stdio.h> |
| #include<math.h> |
| |
| #define N 5 |
| int q[N + 1]; |
| int num = 1; |
| |
| |
| void printQ() { |
| printf("方案%-3d: ", num); |
| for (int i = 1; i <= N; i++) { |
| printf("%d ", q[i]); |
| } |
| printf("\n"); |
| num++; |
| } |
| |
| |
| int check(int j) { |
| |
| for (int i = 1; i < j; i++) { |
| |
| |
| |
| if (q[i] == q[j] || abs(q[i] - q[j]) == abs(i - j)) { |
| |
| return 0; |
| } |
| } |
| |
| return 1; |
| } |
| |
| |
| void queen(int j) { |
| |
| for (int i = 1; i <= N; i++) { |
| q[j] = i; |
| if(check(j)){ |
| |
| if (j == N) { |
| |
| printQ(); |
| }else { |
| |
| queen(j + 1); |
| } |
| } |
| } |
| |
| } |
| |
| int main() { |
| queen(1); |
| return 0; |
| } |
非递归方式N皇后
| #include<stdio.h> |
| #include<math.h> |
| |
| #define N 5 |
| int q[N + 1]; |
| int num = 1; |
| |
| |
| void printQ() { |
| printf("方案%-3d: ", num); |
| for (int i = 1; i <= N; i++) { |
| printf("%d ", q[i]); |
| } |
| printf("\n"); |
| num++; |
| } |
| |
| |
| int check(int j) { |
| |
| for (int i = 1; i < j; i++) { |
| |
| |
| |
| if (q[i] == q[j] || abs(q[i] - q[j]) == abs(i - j)) { |
| |
| return 0; |
| } |
| } |
| |
| return 1; |
| } |
| |
| |
| void queen() { |
| int j = 1; |
| while ( j >= 1 ) { |
| |
| q[j]++; |
| |
| while (q[j] <= N && !check(j)) { |
| q[j]++; |
| } |
| |
| if (q[j] <= N) { |
| |
| if (j == N) { |
| printQ(); |
| }else { |
| j++; |
| } |
| }else{ |
| q[j] = 0; |
| j--; |
| } |
| } |
| } |
| |
| int main() { |
| queen(); |
| return 0; |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步