永发信息网

算法高手请进

答案:3  悬赏:70  手机版
解决时间 2021-05-01 04:52
用排列树算法解N后问题,C++编程
最佳答案

#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");
}



全部回答

这个估计要用概率算法,弄起来有点复杂啊

# 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); }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
DNF中怎么摆摊?
两个人的心离的远吗?
侠盗猎车罪恶都市作弊码输后什吗也不出,为什
坐月子的时候能不能戴金银手饰
黄城村地址有知道的么?有点事想过去
身份证丢失只补办不登报可以吗
有谁愿意和我来互刷留言的?
联想Y450的VISTA如何升级为正版的WINDOW7??
EXE加密视频的破解方法
我前天发烧,吃了药退了,今天早上吃了药也好
新飞飞练哪个职业最好,又该如何练,用什么装
这…算不算爱?
什么事交叉数字啊
挹爽南街/来熏西路(路口)地址有知道的么?有
南半球的夏冬季各受什么天气系统影响?
推荐资讯
湍河办一高中社区卫生室地址在哪,我要去那里
钧艺陶吧我想知道这个在什么地方
建云西一巷怎么去啊,有知道地址的么
冼米水可以美容吗?
为什么 礼包打不开
谁知道兵团卫视广告中那几首插曲是什么歌?
爱可以改变很多东西不是吗?
电脑高手之高手的进。急!!!
谁有不屈意志的寒光剑改黑光的补丁?
红旗河沟到观音桥怎么坐车
迅雷怎么下载不了BT文件?
什么是QQ拼音
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?