八皇后 思路都一样,只是语法不同而已。呵呵,思路是什么? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 严尉敏的数据结构那本书?---一般的学校都用那个作教材的那本那本书的树那一章(比较后面,多叉树),有8皇后的递归算法。我按照那个算法用c实现过了,正确,答案是91把---好像是,可能机错了。:))) 我编的c代码, 改改就java了.答案是91:)#define N 8 //预编译定义N为皇后数;#include <stdio.h>int Count = 0;int Queen[N + 1] = {0}, Column[N + 1] = {0};int Down[2 * N] = {0}, Up[2 * N] = {0}; //Queen[i]为第i个皇后所在的列,初始位零;Column[j]为第j列是否安全{0,1}; //Down[i - j + N], Up[i + j - 1]表示斜线是否安全; void TryQueen (int i);void main(){ TryQueen(1);}void TryQueen (int i){ int j,k; for (j = 1; j <= N; j++) { if ((Column[j] == 0) && (Down[i - j + N] == 0) && (Up[i + j - 1] == 0)) { Queen[i] = j; Column[j] = 1; Down[i - j + N] = 1; Up[i + j - 1] = 1; if (i == N) { printf ("第%d种排法为: \n", ++Count); for (k = 1; k <= N; k++) printf ("第%d个皇后放在第%d行第%d列\n",k ,k ,Queen[k]); printf ("\n"); } else TryQueen(i+1); Queen[i] = 0; Column[j] = 0; Down[i - j + N] = 0; Up[i + j - 1] = 0; //回溯遍历; } }} 不用那么复杂吧?建一个8个元素的一维数组,用下标做行号,值做列号,回溯就行了.原则是:能放就放,不能就换,换不了就退. 回溯法解八皇后和递归法有什么不同啊? 怎么屏蔽实现类,只暴露接口出去 java多线程模拟一下场景 Java做聊天高手进 请教:如何把里面的代码改为socket代码 奇怪的事,设置了CLASSPATH,还是找不到类 图形界面 写个java程序关于文件操作(写,读,修改,删除) 急,求教高手,如何设置JTable中一个单元格的属性? 哪位XDJM能提供关于des3的c++,java交叉加解密的算法 一个大学生的未来:java,delphi or c\c++ 谁能说说int和Integer的区别 关于SmartUpload 请教JAVA下项目管理应该怎么进行?如果有这方面的经验者请进
我按照那个算法用c实现过了,正确,答案是91把---好像是,可能机错了。
:)))
#define N 8 //预编译定义N为皇后数;
#include <stdio.h>
int Count = 0;
int Queen[N + 1] = {0}, Column[N + 1] = {0};
int Down[2 * N] = {0}, Up[2 * N] = {0}; //Queen[i]为第i个皇后所在的列,初始位零;Column[j]为第j列是否安全{0,1}; //Down[i - j + N], Up[i + j - 1]表示斜线是否安全; void TryQueen (int i);void main()
{
TryQueen(1);
}void TryQueen (int i)
{
int j,k; for (j = 1; j <= N; j++)
{
if ((Column[j] == 0) && (Down[i - j + N] == 0) && (Up[i + j - 1] == 0))
{
Queen[i] = j;
Column[j] = 1;
Down[i - j + N] = 1;
Up[i + j - 1] = 1;
if (i == N)
{
printf ("第%d种排法为: \n", ++Count);
for (k = 1; k <= N; k++)
printf ("第%d个皇后放在第%d行第%d列\n",k ,k ,Queen[k]);
printf ("\n");
}
else
TryQueen(i+1);
Queen[i] = 0;
Column[j] = 0;
Down[i - j + N] = 0;
Up[i + j - 1] = 0; //回溯遍历;
}
}
}
原则是:能放就放,不能就换,换不了就退.