c语言八皇后问题所有解法,并且有菜单界面
时间: 2024-03-16 13:46:15 浏览: 47
下面是一个带有菜单界面的C语言程序,可以输出八皇后问题的所有解法:
```c
#include <stdio.h>
#include <stdbool.h>
#define N 8
bool is_safe(int board[N][N], int row, int col)
{
int i, j;
for(i = 0; i < col; i++)
{
if(board[row][i]) return false;
}
for(i = row, j = col; i >= 0 && j >= 0; i--, j--)
{
if(board[i][j]) return false;
}
for(i = row, j = col; j >= 0 && i < N; i++, j--)
{
if(board[i][j]) return false;
}
return true;
}
bool solve(int board[N][N], int col, int *count)
{
if(col >= N)
{
(*count)++;
printf("Solution %d:\n", *count);
int i, j;
for(i = 0; i < N; i++)
{
for(j = 0; j < N; j++)
{
printf("%d ", board[i][j]);
}
printf("\n");
}
printf("\n");
return true;
}
int i;
bool found = false;
for(i = 0; i < N; i++)
{
if(is_safe(board, i, col))
{
board[i][col] = 1;
found = solve(board, col + 1, count) || found;
board[i][col] = 0;
}
}
return found;
}
void print_menu()
{
printf("\n");
printf("1. 打印所有解\n");
printf("2. 打印第一个解\n");
printf("3. 退出程序\n");
printf("\n");
}
int main()
{
int board[N][N] = {0};
int count = 0;
int choice;
bool found;
while(true)
{
print_menu();
printf("请选择操作: ");
scanf("%d", &choice);
switch(choice)
{
case 1:
found = solve(board, 0, &count);
if(!found)
{
printf("No solution found!\n");
}
break;
case 2:
found = solve(board, 0, &count);
if(!found)
{
printf("No solution found!\n");
}
break;
case 3:
return 0;
default:
printf("无效选项,请重试!\n");
break;
}
}
return 0;
}
```
这个程序使用了一个菜单界面,可以让用户选择要执行的操作。用户可以选择打印所有解,打印第一个解或退出程序。程序的输出与之前的程序相同,但是会在每个解的前面加上"Solution x:",其中x是解的编号。如果找不到解,则输出"No solution found!"。
阅读全文