利用深度搜索法解决八皇后问题

13 篇文章 0 订阅
八皇后问题每行必须有一个皇后,所以,对棋盘深搜时,第一个皇后的位置不妨设为第一行,这样只对第一行进行搜索,同理,第二个皇后不妨设为第二行,以此类推。

下面附我的代码:

#include<iostream>

using namespace std;

struct node1

{bool b[8][8]; };//棋盘模拟,不可以放皇后的地方值为0,可以为1;

struct node2

{ int x,y;};//记录放皇后的位置坐标

//node1 a[9];

node1 visited[9];

node2 zb[8];

int num;//记录有多少中方法

void print()//输出用的函数,坐标从0开始,到7/。

{printf("case%d: ",++num); for(int i=0;i<=7;i++)

{printf("%d,%d\t",zb.x,zb.y); }

cout<<'\n';

}

int x1,x2,x3,x4,y1,y2,y3,y4;

void vis(int x,int y,int step)//模拟记录在第step步时,把皇后放在x,y位置后,哪些地方就不能放皇后了。

{

x1=x;y1=y;

x2=x;y2=y;

x3=x;y3=y;

x4=x;y4=y;

visited[step]=visited[step-1];

for(int i=0;i<8;i++)

{

visited[step].b[x]=0;

visited[step].b[y]=0;

}

while(x1<8&&y1<8)

{

visited[step].b[x1][y1]=0;

x1++;y1++;

}

while(x4<8&&y4>=0)

{

visited[step].b[x4][y4]=0;

x4++;y4--;

}

}

void DFS(int step)

{

if(step==9)//step=9时,说明已经放了八个皇后了,该是输出的时候了。

print();

else

{

for(int j=0;j<8;j++)

if(visited[step-1].b[step-1][j])

{

zb[step-1].x=step-1;

zb[step-1].y=j;

vis(step-1,j,step);

DFS(step+1);

}

}

}

int main()

{

num=0;

memset(visited,1,sizeof(visited));

DFS(1);

system("pause");

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值