算法高手请进
答案:3 悬赏:70 手机版
解决时间 2021-05-01 04:52
- 提问者网友:孤山下
- 2021-04-30 10:00
用排列树算法解N后问题,C++编程
最佳答案
- 五星知识达人网友:过活
- 2021-04-30 11:33
#include <stdio.h>
#include <stdlib.h>
const int N=20;
int q[N];
int cont=0;
void print(int n)
{
cont++;
int i;
printf("第%d个解:",cont);
for(i=1;i<=n;i++)
printf("%d",q[i]);
printf("\n");
}
int find(int i,int k)
{
int j;
j=1;
while(j<k)
{
if((q[j]==i)||(abs(q[j]-i)==abs(j-k)))
return 0;
j++;
}
return 1;
}
void place(int k,int n)
{
if(k>n)
print(n);
else
for(int i=1;i<=n;i++)
if(find(i,k))
{
q[k]=i;
place(k+1,n);
}
}
void main()
{
int n;
printf("皇后问题(n<20) n=");
scanf("%d",&n);
printf("%d皇后问题求解如下:\n",n);
place(1,n);
printf("\n");
}
全部回答
- 1楼网友:你哪知我潦倒为你
- 2021-04-30 12:53
这个估计要用概率算法,弄起来有点复杂啊
- 2楼网友:青灯有味
- 2021-04-30 12:17
# include <stdio.h>
# include <stdlib.h>
# define MAXN 20
int n,m,good;
int col[MAXN+1],a[MAXN+1];
int b[2*MAXN+1],c[2*MAXN+1];
int main()
{int j;
char awn;
printf("输入n:");scanf("%d",&n);
for(j=0;j<=n;j++)a[j]=1;
for(j=0;j<=2*n;j++)b[j]=c[j]=1;
m=1;col[1]=1;good=1;col[0]=0;
do{
if (good)
if (m==n)
{
printf("列\t\t行\n");
for (j=1;j<=n;j++) printf("%3d\t%d\n",j,col[j]);
scanf("%c",&awn);
if (awn=='Q'||awn=='q') exit(0);
while (col[m]==n)
{
m--;
a[col[m]]=b[m+col[m]]=c[n+m-col[m]]=1;
}
col[m]++;
}
else {
a[col[m]]=b[m+col[m]]=c[n+m-col[m]]=0;
col[++m]=1;
}
else {
while (col[m]==n){
m--;
a[col[m]]=b[m+col[m]]=c[n+m-col[m]]=1;
}
col[m]++;
}
good=a[col[m]]&&b[m+col[m]]&&c[n+m-col[m]];
}while (m!=0);
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯