| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 625 人关注过本帖
标题:[求助]我的这个八皇后的程序为什么得不出结果?
只看楼主 加入收藏
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
 问题点数:0 回复次数:5 
[求助]我的这个八皇后的程序为什么得不出结果?

/*八皇后程序*/
/*程序说明:a[i]=j表示第i行在第j列上有皇后*/

/*请大侠们帮忙看下,谢谢!*/

#include <stdio.h>
int bijiao(int a,int b)
{
return (a==b)?1:0;
}

int function1(int a[],int n) /*用来检验两个皇后是否在同一列,如果在同列,返回0*/
{
int i=1,j,sum=0;
for(;i<n;i++)
for(j=i+1;j<n;j++)
{
sum+=bijiao(a[i],a[j]);
if(sum>0)
break;
}
return sum;
}
int function2(int a[],int n) /*函数用来检验任意两个数是否成对角线,如果有,返回0*/
{
int i,j,x;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{
x=a[i]-a[j];
if(x<0)
x=-x;
if(x==j-i)
return 0;
}
return 1;
}
main()
{
int a[9]={0};
int i;
for(a[1]=1;a[1]<9;a[1]++)
for(a[2]=1;a[2]<9;a[2]++)
for(a[3]=1;a[3]<9;a[3]++)
for(a[4]=1;a[4]<9;a[4]++)
for(a[5]=1;a[5]<9;a[5]++)
for(a[6]=1;a[6]<9;a[6]++)
for(a[7]=1;a[7]<9;a[7]++)
for(a[8]=1;a[8]<9;a[8]++)
{
if((!function1(a,9))||(!function2(a,9)));/*只要有a[i]a[j]的差绝对值等于j-i,则说明它们在同对角线上,则循环继续*/
continue;/*只要有两个a[i]a[j]相等,则循环继续*/
for(i=1;i<9;i++)
printf("%d",a[i]);
printf("\n");
}
getch();

}

搜索更多相关主题的帖子: 皇后 int 结果 
2006-04-09 13:00
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 

大家进来,帮帮我啊!!!


对不礼貌的女生收钱......
2006-04-09 13:12
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
版主,快进来啊!

对不礼貌的女生收钱......
2006-04-09 13:48
seagullFHcn
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-5-9
收藏
得分:0 
给你一段我自己写的代码
#include "stdio.h"
#include "math.h"
#include "stdlib.h"
void queen(int n)
{
int i,j,k,jt,*q;
q=malloc(n*sizeof(int));
for(i=0;i<n;i++) q[i]=0;
i=0;
jt=1;
printf("\n");
printf("%d queen problem\n",n);
while(jt==1)
{
if(q[i]<n)
{
k=0;
while((k<i)&&((q[k]-q[i])*(fabs(q[k]-q[i])-fabs(k-i)))!=0) k=k+1;
if(k<i) q[i]=q[i]+1;
else
{
if(i==n-1)
{
for(j=0;j<n;j++)
printf("%5d",q[j]+1);
printf("\n");
q[n-1]=q[n-1]+1;
}
else i=i+1;
}
}
else
{
q[i]=0;
i=i-1;
if(i<0)
{
printf("\n");
free(q);
return;
}
q[i]=q[i]+1;
}
}
}
这是C实现,在代码后面加上主函数就可以用了。
还有,主函数里面必须给出int n的值,就是棋盘大小。
2006-05-09 20:48
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 

/*最小改动原则下*/
#include <stdio.h>
int bijiao(int a,int b)
{
return (a==b?1:0);
}

int function1(int a[],int n)
{
int i,j,sum=0;
for(i=1; i<n;i++)
for(j=i+1;j<n;j++)
{
sum+=bijiao(a[i],a[j]);
if(sum>0)break;
}
return sum;
}
int function2(int a[],int n)
{
int i,j,x;
for(i=1; i<n;i++)
for(j=i+1;j<n;j++)
{
x=a[i]-a[j];
if(x<0)x=-x;
if(x==j-i)
return 0;
}
return 1;
}

main()
{
int a[9]={0};
int i;
for(a[1]=1;a[1]<9;a[1]++)
for(a[2]=1;a[2]<9;a[2]++)
for(a[3]=1;a[3]<9;a[3]++)
for(a[4]=1;a[4]<9;a[4]++)
for(a[5]=1;a[5]<9;a[5]++)
for(a[6]=1;a[6]<9;a[6]++)
for(a[7]=1;a[7]<9;a[7]++)
for(a[8]=1;a[8]<9;a[8]++)
{
if(function1(a,9)!=0||function2(a,9)==0)
continue;
for(i=1;i<9;i++)
printf("%d",a[i]);
printf("\t");
}
}


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-09 21:20
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 

呵呵,谢谢大家了,很久没人看这个程序,我都忘了,
这个程序我解决了,不过还是谢谢大家的大力帮助!!


对不礼貌的女生收钱......
2006-05-10 16:00
快速回复:[求助]我的这个八皇后的程序为什么得不出结果?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034792 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved