求助~~枚举法8皇后问题

Iantone 2012-12-06 09:48:15
这是我用枚举法编的8皇后问题,为什么运行错误呢?
求大神指教~~~~


#include"iostream"
using namespace std;
int si=7,s[8]={8,8,8,8,8,8,8,8},a[1]={1}; //a[]用于表示当前棋盘当前行的皇后与前几行的皇后是否可共存,
//共存为1,不共存为0

void taken(int b[][8],int j,int i,int a[]) //判断是否共存函数,b[][]为棋盘,j为行,i为列
{
int n;
n=j;
for(n;n>0;n--)
{
if(j-n<0||i-n<0) //判断是否检验完毕
{
a[0]=0;
break;
}
if(b[j-n][i-n]==1||b[j-n][i+n]==1) //检验当前行皇后左上方,右上方是否存在皇后
{
a[0]=0;
break;
}
if(b[j-n][i]==1) //检验当前行皇后上方是否有其他皇后
{
a[0]=0;
break;
}
a[0]=a[0]*1; //该行皇后上方几行皇后共存
}
return;
}

void display(int b[][8]) //输出棋盘
{
int j,i;
for(j=0;j<8;j++)
{
for(i=0;i<8;i++)
{
cout<<b[j][i];
}
cout<<endl;
}
}

void voluate(int b[][8]) //递归制造8皇后棋盘函数
{
int m,t;
s[si]--;
if(si<0)return;
t=7-s[si];
for(m=0;m<8;m++)
{
b[t][m]=1;
taken(b,t,m,a);
if(m==7)
{
si--;
display(b);
b[t][m]=0;
}
voluate(b);
}
}


void main()
{
int b[8][8]={0},q,i,j;
voluate(b);
}
...全文
311 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kuovane 2012-12-07
  • 打赏
  • 举报
回复
只帮你把那个运行时错误改了,不包逻辑
引用 5 楼 Iantone 的回复:
引用 3 楼 lansong4 的回复:红色是改过的 void voluate(int b[][8]) //递归制造8皇后棋盘函数 { int m,t; if(si<0) { return; } s[si]--; if(s[si]<0) { return; } t=7-s[si]; for……
Iantone 2012-12-07
  • 打赏
  • 举报
回复
引用 4 楼 kuzuozhou 的回复:
换个思路,也许思路更开阔。 更多八皇后问题参见: http://blog.csdn.net/kuzuozhou/article/details/8033180 http://blog.csdn.net/kuzuozhou/article/details/8033372
题目要求用枚举
Iantone 2012-12-07
  • 打赏
  • 举报
回复
引用 3 楼 lansong4 的回复:
红色是改过的 void voluate(int b[][8]) //递归制造8皇后棋盘函数 { int m,t; if(si<0) { return; } s[si]--; if(s[si]<0) { return; } t=7-s[si]; for(m=0;m<8;m++) { b……
输出的还是就不对。。。。
pengfoo 2012-12-06
  • 打赏
  • 举报
回复
换个思路,也许思路更开阔。 更多八皇后问题参见: http://blog.csdn.net/kuzuozhou/article/details/8033180 http://blog.csdn.net/kuzuozhou/article/details/8033372
Kuovane 2012-12-06
  • 打赏
  • 举报
回复
红色是改过的 void voluate(int b[][8]) //递归制造8皇后棋盘函数 { int m,t; if(si<0) { return; } s[si]--; if(s[si]<0) { return; } t=7-s[si]; for(m=0;m<8;m++) { b[t][m]=1; taken(b,t,m,a); if(m==7) { si--; display(b); b[t][m]=0; } voluate(b); } }
引用 2 楼 Iantone 的回复:
引用 楼主 Iantone 的回复: 这是我用枚举法编的8皇后问题,为什么运行错误呢? 求大神指教~~~~ #include"iostream" using namespace std; int si=7,s[8]={8,8,8,8,8,8,8,8},a[1]={1}; //a[]用于表示当前棋盘当前行的皇后与前几行的皇后是否可共存, //共存为1,不共存为0 ……
Iantone 2012-12-06
  • 打赏
  • 举报
回复
引用 楼主 Iantone 的回复:
这是我用枚举法编的8皇后问题,为什么运行错误呢? 求大神指教~~~~ #include"iostream" using namespace std; int si=7,s[8]={8,8,8,8,8,8,8,8},a[1]={1}; //a[]用于表示当前棋盘当前行的皇后与前几行的皇后是否可共存, //共存为1,不共存为0 void ……
你该在哪了?
Kuovane 2012-12-06
  • 打赏
  • 举报
回复
至于逻辑是否正确,还需要你继续思考
#include"iostream"
using namespace std;
int si=7,s[8]={8,8,8,8,8,8,8,8},a[1]={1};        //a[]用于表示当前棋盘当前行的皇后与前几行的皇后是否可共存,
//共存为1,不共存为0

void taken(int b[][8],int j,int i,int a[])      //判断是否共存函数,b[][]为棋盘,j为行,i为列
{
	int n;
	n=j;
	for(n;n>0;n--)
	{
		if(j-n<0||i-n<0)                       //判断是否检验完毕
		{
			a[0]=0;
			break;
		}
		if(b[j-n][i-n]==1||b[j-n][i+n]==1)     //检验当前行皇后左上方,右上方是否存在皇后
		{
			a[0]=0;
			break;
		}
		if(b[j-n][i]==1)                      //检验当前行皇后上方是否有其他皇后
		{
			a[0]=0;
			break;
		}
		a[0]=a[0]*1;                            //该行皇后上方几行皇后共存
	}
	return;
}

void display(int b[][8]) //输出棋盘
{
	int j,i;
	for(j=0;j<8;j++)
	{
		for(i=0;i<8;i++)
		{
			cout<<b[j][i];
		}
		cout<<endl;
	}
}

void voluate(int b[][8])                     //递归制造8皇后棋盘函数
{
	int m,t;
	if(si<0)
	{
		return;
	}
	s[si]--;
	if(s[si]<0)
	{
		return;
	}
	t=7-s[si];
	for(m=0;m<8;m++)
	{
		b[t][m]=1;
		taken(b,t,m,a); 
		if(m==7)
		{
			si--;
			display(b);
			b[t][m]=0;
		}
		voluate(b);
	}
}


void main()
{
	int b[8][8]={0},q,i,j;
	voluate(b);
}

64,680

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧