不太明白楼主的思路,a[][]是迷宫数据吧,怎么还能修改了?
今天有了点时间,看了下,知道怎么回事了。
先就题论题,说下解决方案:把 if(a[c[k][0]][c[k][1]]==1)改成 if(a[c[k][0]+b[i][0]][c[k][1]+b[i][1]]==1),有了解决方案,问题原因就很明白了,你应该是知道的,我不多说了。
然后再延伸下,说下楼主的算法:经过上面的修改后,程序是可以得到正确结果了,但那是因为这个迷宫比较简单,而不是因为算法是正确的,如果换一个稍微复杂点的迷宫,很可能它就又不会有输出了,下面详细说明,这是你原来的迷宫:
1,1,1,0,0,0
0,0,1,0,0,0
0,0,1,1,0,0
0,0,0,1,1,0
0,0,0,0,1,1
0,0,0,0,0,1
它只有一条路,而这条路是通的,所以你的算法可以顺利运行出结果,但是如果我把它修改成这样:
1,1,1,0,0,0
1,0,1,0,0,0
1,0,1,1,0,0
1,0,0,1,1,0
1,0,1,0,1,1
1,1,1,0,0,1
这样的迷宫里有两条路,一条是原来的那条通路,一条是死胡同,而你的算法会先去尝试那条死胡同,而且到了死胡同的尽头后会卡在最后两步来回重复,再也出不去了,这是你自己的算法,你自己应该能想明白,我就不说那么多了。
所以一个正确的算法应该去检测是否到了死胡同,如果是的话就应该沿原路回滚直到上次的岔路口,然后判断这个岔路口的每个分支是否都走过了,如果是就继续回滚到再上一次的岔路口,具体算法我现在没时间考虑了,你得靠自己了,如果实在不行可以给我留言,我有空再帮你想想。
c#界面绘制的时候,底层重绘每次会清除画布背景,然后再全部重新绘制,这才是导致闪烁最主要的原因。于是重载消息发送函数 *** 作,禁掉这条消息。代码如下:
protected override void WndProc(ref Message m)
{
if (mMsg == 0x0014) // 禁掉清除背景消息
return;
baseWndProc(ref m);
}
首先根据自己的需要和喜好,去素材网站下载ico图标,当然这些图标VB60不一定能够直接用。
开始--打开ArtIcons Pro软件。
打开的ArtIcons Pro软件界面如图所示:
“文件”--“打开”,d出打开对话框,选择所需修改的图标,单击“打开”按钮打开图标,在软件中显示出来。
在软件右侧,单击鼠标右键,选择“新图像”命令。
在打开的“新图像格式对话框”中按照VB60所需的ico图标格式进行设置:
大小选择48X48,颜色选择256色,其它默认,单击“确定按钮进行确认。”
此时按照刚刚制定的格式,生成了一个新图像:
"文件"--“导出”--“当前图像”,命名后保存。生成一个新图标如图所示:
随便打开一个VB60工程,将刚刚生成的图标加入到Form1的ico属性中:
在“文件”菜单下选择生成exe命令,在d出的生成工程对话框中按确定按钮,生成了一个心形图标,非常美观。想要生成自己喜欢的图标都可以参照以上方法。
以上就是关于迷宫问题求错 c语言程序 程序代码如下 : 但程序总无输出全部的内容,包括:迷宫问题求错 c语言程序 程序代码如下 : 但程序总无输出、C语言编程 迷宫问题(队列)、VB6.0制作迷宫程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)