昨天室友让我一笔写“田”字,想了好久没有结果,百度一下,有如下定理:
一笔画的规律:
1.凡是由偶点组成的连通图,一定可以一笔画成。画时可以把任一偶点为起点,最后一定能以这个点为终点画完此图。
2.凡是只有两个奇点的连通图(其余都为偶点),一定可以一笔画成。画时必须把一个奇点为起点,另一个奇点终点。
3.其他情况的图都不能一笔画出。
注:与奇数(单数)条边相连的点叫做奇点;与偶数(双数)条边相连的点叫做偶点。
由于“田”字有4个奇点、5个偶点,因此,该字不可能一笔完成。
没事干就想写个小程序找下其解,根据对称性,分别从“田”字的顶点(四个角的点)、外边中间的点、和中心点出发,搜寻是否可以不重复遍历“田”字12条边的情况,根据运行结果找不到这样的笔法,也就是说按常规写法,一笔写不出“田”字。
从顶点出发的最好结果:走过9条边
从中间点出发的最好结果:走过10条边
从中心点出发的最好结果:走过9条边
搜寻过程的代码:
public void findWay(){
boolean flag=true; //是否有解
int cnt=0; //搜寻次数
while(getLineValue()<12){
currDirection=getNextDirection(); //寻找下一个方向
while(currDirection==-1){
cnt++;
if(trace.empty()){
System.out.println("no answer!");
flag=false;
break;
}
UnicursalNode tmp=trace.pop();
updateLineValue(currPos,tmp.getCurrPos(),0);
currPos=tmp.getCurrPos();
currDirection=tmp.getCurrDirection();
currDirection=getNextDirection();
}
if(!flag)
break;
Point pt=new Point(currPos.getX(),currPos.getY());
UnicursalNode node=new UnicursalNode(pt, currDirection);
trace.push(node);
currPos.move(currDirection, 2);
updateLineValue(node.getCurrPos(), currPos,1);
currDirection=0;
}
System.out.println(trace+", cnt="+cnt);
}
分享到:
相关推荐
在"计算机图形学 金刚石一笔画魔术三角等"这个主题中,我们将会深入探讨几个关键概念,包括金刚石一笔画、魔术三角、递归圆、Bezier曲线、三次B样条曲线、北极星算法以及裁剪技术。 首先,金刚石一笔画是一种基于...
"一笔画问题"是图论中的经典问题,指的是在给定的图形中,从某一点出发,沿着边不间断地走过所有边,最后回到起点,并且每条边恰好被走过一次。这种问题通常可以用DFS(深度优先搜索)或BFS(广度优先搜索)算法来...
在这款一笔画游戏中,玩家需要按照一定的规则,用一笔连续不断地绘制出图形,不允许线条重复,也不能断开。这种类型的游戏通常具有益智和娱乐性,可以锻炼玩家的空间思维和逻辑推理能力。 源码中可能包含以下关键...
1. **笔画定位**:田字格的四条线为每一笔画提供了精确的起点和终点,帮助练习者控制笔的走向,确保笔画的直、曲、粗、细得当。 2. **结构平衡**:通过将汉字的部件放置在田字格的不同位置,学习者可以更好地理解并...
一笔画问题是二年级奥数中涉及几何概念的有趣题目,主要考察学生的逻辑推理能力和空间想象力。一笔画是指在不离开纸面且不重复路径的情况下,用一笔完成的图形绘制。理解一笔画的关键在于识别图形中的“奇点”和“偶...
这个问题与计算机科学中的算法设计密切相关,特别是在图形界面、游戏开发和网络路由等领域有应用。 在C++编程语言中解决一笔画问题,我们需要设计几个关键的数据结构和算法。这里涉及的文件主要有四个:`main.cpp`...
《Qt一笔画小游戏源码解析》 Qt是一个跨平台的C++图形用户界面应用程序开发框架,广泛应用于桌面、移动和嵌入式系统。本项目基于Qt实现了一款一笔画游戏,这种游戏通常要求玩家在一张网格上用一笔连接所有的点,且...
在Java编程领域,"一笔画"问题是一个经典的图论与算法设计问题,它源自于一种叫做"一笔连通图"的数学概念。一笔画游戏通常指的是玩家需要在给定的图形上只用一笔画出所有线条,且不允许线段重复交叉。在编程实现中,...
总的来说,这个"一笔画-C++游戏"项目结合了计算机图形学、算法设计、用户界面开发以及游戏逻辑等多个IT领域的知识,对于学习和提升C++编程技能,特别是MFC应用开发和图形界面设计,具有很高的实践价值。
"幼童文库一笔画"是一款专为儿童设计的教育软件,旨在通过一笔画的玩法,帮助孩子们在娱乐中学习,提升他们的观察力、想象力和手眼协调能力。这款应用的特点在于,它提供了多种动物图形,让孩子们用尽可能简单的方式...
微信一笔画完是一款广受欢迎的休闲游戏,玩家需要在限定的格子内用一笔连通所有线条,不重复也不遗漏。对于部分复杂关卡,玩家可能会遇到挑战,这时"微信一笔画完辅助代码"就应运而生。这类辅助代码通常是编程高手...
信息学竞赛系列教程,欧拉回路和欧拉路径的基本性质,一笔画问题的两种不同解法。
标题中的“基本Qt的一笔画小游戏”指的是使用Qt框架开发的一款简单的一笔画游戏。Qt是一个跨平台的应用程序开发框架,广泛用于创建桌面、移动和嵌入式平台上的图形用户界面(GUI)应用。它提供了丰富的API和工具,...
微信小程序“一笔画辅助”是一种利用编程技术解决游戏中特定问题的应用。一笔画游戏通常要求玩家在给定的图形内,不重复任何边,用一笔连接所有的点。这种游戏看似简单,但随着关卡的深入,难度逐渐提升,部分关卡...
安卓一笔画 OnetouchDrawing 1.1.8.apk
一笔画问题,源自图论中的概念,是一个有趣的数学游戏,要求从图形的某一点出发,不抬笔并沿着所有线条恰好走过一次,最后回到起点。判断一个图形能否一笔画成的关键在于分析其顶点的度数,即每个顶点连接的线段数量...
"一笔画程序 OneTouchDraw" 是一个专门设计用于解决一笔画游戏的软件应用。一笔画游戏,也称为欧拉路径问题,是经典的逻辑谜题,玩家需要从起点开始,沿着图形的边,不重复任何边,最后回到起点,完成整个图形的绘制...
应用:一笔画在数学和计算机科学中有着广泛的应用,如图论、计算机网络、数据结构等领域。因此,理解一笔画的概念和规律对学生的数学和计算机科学学习非常重要。 这份PPT学习教案为学生提供了一个系统的学习平台,...