和12楼16楼的基本想法查不多,但由于可能的顺序太多,如果不找到特殊的规律算法复杂度就是N!量级。算到12后就很慢了。
很多数没有解.
恩..12楼的其实也是穷举法.昨天我做了..也不比我的少几个for
如果象你说的那样..5.6 9.10等..无解的话
那么 feng1256 昨天告诉我的规律就是对的..这下得研究下了..
----------------解决方案--------------------------------------------------------
我前面贴的程序是对于一个数出现第一个解就停掉,如果取消掉这个限制,发现3,4是两个解,除去对称的就是一个。7有52个解,也就是26个不重复的。8大约有二三百个解。看来解的数目也几乎是阶乘增长的。那这算法就没什么可说的了。
----------------解决方案--------------------------------------------------------
....我晕 太夸张了 这个帖子 引出这么多高手呀!!!
期待我这个菜蛋 快点 成长
向大家学习~~~
----------------解决方案--------------------------------------------------------
呵呵,厉害啊,我回去做了一下,也是用穷举的.却出错了...
#include <stdio.h>
#define N 3
int a[2*N]={0};
int b[N+1]={0};
void dosort(int k)
{
int i;
if(k<N)
for(i=1;i<N+1;i++)
{
if(b[i]==0&&a[k]==0&&a[k+i+1]==0&&k+i+1<2*N)
{
b[i]=1;
a[k]=a[k+i+1]=i;
dosort(k+1);
b[i]=a[k]=a[k+i+1]=0;
}
}
if(k==N)
{
for(i=0;i<2*N;i++)
printf("%5d",a[i]);
printf("\n");
}
}
int main()
{
dosort(0);
getch();
}
谁可以告诉我错哪了?
----------------解决方案--------------------------------------------------------
当N大于3的时候就算不出来了???
还请版主和高手帮我看看,
谢谢了!!
----------------解决方案--------------------------------------------------------
楼上的,先说说你的思路呀。
----------------解决方案--------------------------------------------------------
好,您等下,我注释下
----------------解决方案--------------------------------------------------------
#include <stdio.h>
#define N 3
int a[2*N]={0}; /*初始为0,用来存储数组*/
int b[N+1]={0}; /*数组用来标记检查,如,b[3]=1,表示3这个数已经被用在数组a[]中,如果为0表示还没有被用到排列中*/
void dosort(int k)
{
int i;
if(k<N)
for(i=1;i<N+1;i++)
{
if(b[i]==0&&a[k]==0&&a[k+i+1]==0&&k+i+1<2*N) /*如果数i没被用且a[k]和a[k+i+1]这个位置还没被占据,同时下标不能越界*/
{
b[i]=1; /*标记i,表示i已经被用了*/
a[k]=a[k+i+1]=i; /*填入数i,两者距离为i+1*/
dosort(k+1); /*继续递归*/
b[i]=a[k]=a[k+i+1]=0; /*恢复原始值,以便进入下一重循环*/
}
}
if(k==N) /*此时数已经全部填充完,输出*/
{
for(i=0;i<2*N;i++)
printf("%5d",a[i]);
printf("\n");
}
}
int main()
{
dosort(0);
getch();
}
谁可以告诉我错哪了?
----------------解决方案--------------------------------------------------------
没这么简单的。缺很多条件,
/*如果数i没被用且a[k]和a[k+i+1]这个位置还没被占据,同时下标不能越界*/
如果占据了怎么办?不能什么都不作,还得在后面接着找地方放,直到全找编了为止。这其实是个挺罗嗦的算法。
----------------解决方案--------------------------------------------------------
,我根本就不怎么懂,就更不用说做了,我向大家学习啊
----------------解决方案--------------------------------------------------------