超难数学题,大家可以慢慢想

有8×8=64个点,给他们规定坐标(1,1)到(8,8)。
有一个动点在这64个点的某一个点上,他的跳动规则是:
如果它现在在(x,y)它下一步可以跳到(x±1,y±2)
或(x±2,y±1)(所有的“±”之间没有相关性),也
就是说一般来说它下一步可以有八种跳法。但是它不能跳
出这64个点。请证明:存在一种跳动路线使它不管从哪出
发都可以跳遍所有的点最后回到起点。
请证明:存在一种跳动路线使它不管从哪出发都可以不重复的跳遍所有的点最后回到起点。
如果现在它在(2,4)他下一步可以跳到(3,6)(3,2)(1,6)(1,2)(4,5)(4,3)六个点中的一个,很像象棋中的马
大家可以回去慢慢想,10天之内不会采纳任何答案
谢谢各位的解答。现在已经有两位朋友找到了特例。此问题的存在性已经解决。现在还想问下大家,如果要编程,算法流程是怎样的?

数学证明比较复杂,可以看看
http://faculty.olin.edu/~sadams/DM/ktpaper.pdf

编程证明,我用的是贪心法,(DEV-C++)

#include <iostream>
using namespace std;

struct info {int x,y,out;};
const int dx[8]={-2,-2,-1,-1, 1, 1, 2, 2};
const int dy[8]={-1, 1,-2, 2,-2, 2,-1, 1};
const int R=8,C=8;
int board[R][C];

int outlet(int x,int y)
{
int ct=0;
for(int i=0;i<8;++i)
if(x+dx[i]<0||y+dy[i]<0||x+dx[i]>=R||y+dy[i]>=C||board[x+dx[i]][y+dy[i]]) continue;
else ++ct;
return ct;
}//计算(x,y)的出口数

void sort(info *p,int n)
{
for(int i=n-1;i>0;--i)
if(p[i].out<p[i-1].out) swap(p[i],p[i-1]);
else break;
}//按出口数由小到大排序

bool search(int x,int y,int step)
{
if(board[x][y]) return false;
if(step==R*C)
{
board[x][y]=step;
return true;
}
else
{
board[x][y]=step;
int i,j; info dir[8];
for(i=j=0;i<8;++i)
if(x+dx[i]<0||y+dy[i]<0||x+dx[i]>=R||y+dy[i]>=C||board[x+dx[i]][y+dy[i]]) continue;
else
{
dir[j].x=x+dx[i];dir[j].y=y+dy[i];
dir[j].out=outlet(dir[j].x,dir[j].y);
sort(dir,++j);
}
for(i=0;i<j;++i)
if(search(dir[i].x,dir[i].y,step+1)) return true;
board[x][y]=0;
return false;
}
}//求解

int main()
{
int i,j,m,n;
for(i=0;i<R;++i)
for(j=0;j<C;++j)
{
memset(board,0,R*C*sizeof(int));
if(search(i,j,1))
{
printf("start at(%d,%d):\n",i+1,j+1);
for(m=0;m<R;++m)
{
for(n=0;n<C;++n)
printf("%4d",board[m][n]);
printf("\n\n");
}
}
else
printf("start at(%d,%d) has no solve!\n",i+1,j+1);
}
system("pause");
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-01-30
分类讨论好吧??

由于8*8格,9*9线,属中心对称,我们不妨将其分为八个区域,但讨论以其中一个区域中任意点为起点的情形,交点情形如下
----abcde
----fghi-
----jkl--
----mn---
----o----
---------
---------
---------
---------
由于马步的规律,a-o点中,可有如下类(每一类点连线均平行)
第一类:ok,kc,mg,jb,nh,ld
第二类:fn,ak,bl
第三类:fl,ah,bi
第四类:ik,fc,dg,jh,eh,lm
每类下的点不可串联(除公共外,例如okc),但不同类下可以串。
观察二三类,fnlbi可串,ahk可以串,三四类,可知iokcf可串,dmgl可串,jhbne可串
这样,有公共的l,h,k,n,那么,a-o所有点都已可串
就是说,a-o不论以谁为起点都可以历遍a-o中任何一点,最终停止点,也可以是任意一点。
这样,a-o不论以谁为起点终点都可以走遍所有点而回到o点。

我们说的可是中心对称啊!对于棋盘中任意对称的八块,随便选一块,此块中任意点为起点,也一定可以走遍此块中所有点最后回到o点.

那么对于任意点A,我们可以构造路径,在此块中走遍所有点,到O,在其相邻块走遍块中所有点,返回O,以此下去……
肯定能走到,多磨蹭几次就好了
---------------------------------
这个网页排版让我很郁闷,你自己把a-o弄整齐一点好了
第2个回答  2008-01-24
我找到了
事实胜于雄辩,对吧?
这样:我给你一种方法,能在棋盘上用“马步”跳出一个圈(即找到一条路,不仅跳过每一个格,而且从最后一步可以调到第一步)
这样无论从哪开始,只要在圈上走就好了
数字代表是在第几步跳到那一格的
********
要是看起来不方便,那时字体造成的。复制到记事本里再看就好了
********
发现错误或者有疑问可以给我发消息。
63|22|15|40|01|42|59|18
-----------------------------------
14|39|64|21|60|17|02|43
-----------------------------------
37|62|23|16|41|04|19|58
-----------------------------------
24|13|38|61|20|57|44|03
-----------------------------------
11|36|25|52|29|46|05|56
-----------------------------------
26|51|12|33|08|55|30|45
-----------------------------------
35|10|49|28|53|32|47|06
-----------------------------------
50|27|34|09|48|07|54|31
第3个回答  2008-01-24
小学奥赛中的染色法就是这个样子的...只要保证每一次跳到的是相同颜色的点,就能保证能够回到原位.
染色法是我小学奥赛中学的最好的,我才初中,相信我.
第4个回答  2008-01-24
我现在证明不出,但我知道 “有思想的蛋”的答案不对,你自己画一下就知道了……
我可以证明出一个必要条件:点的个数是4的倍数!