谢维康突然一拍桌子,喝道:“有了!”
这一嗓子把小哥惊得一个激灵,他忍不住骂道:“别一惊一乍的,吓我一大跳!快说,你想到什么办法了?”
谢维康指着屏幕上的迷宫,说道:“你仔细看,你这些迷宫,周围是不是都围着一圈墙?”
小哥紧盯着屏幕,目光跟着谢维康的手指移动,顺着他的话细细思索。
谢维康的手在屏幕上滑动,继续分析道:“你看,这圈墙后面是路,路后面又是墙。也就是说,在这个二维平面里,垂直方向第一列是墙、第二列是路、第三列是墙、第四列是路,以此类推,奇数列是墙,偶数列是路。水平方向也是一样,没错吧?”
小哥领会过来,轻轻点了点头。
“而且你的和终点,都开在这最外圈的墙上,中间的路也连通着墙。”谢维康接着说道,“我有个想法,你听听行不行?”
见谢维康停了下来,还直盯着自己,小哥急道:“你快说啊,别卖关子了,我都快愁死了!”
谢维康解释道:“先,这些地图的宽度和高度必须是奇数行、奇数列。你先生成一圈墙,再定好入口和出口,接着从入口开始生成路。用o、、、四个数字表示前进方向,每次往前走两步就生成一个节点,做好标记,再用随机数确定下一步方向。这样一来,这些节点就是迷宫里的路。要是当前方向的下一个节点已经有标记,说明这条路走不通,得转弯;要是前进方向的前、左、右三个方向都有标记,那就是死路。之后你扫描整个地图数据,找到未标记的节点,这个节点周围四个节点里,肯定有一个是已标记的。从这个已标记节点开始,往未标记节点继续重复上面的流程,直到扫描完整个地图、找不到未标记节点为止。这些连在一起的节点就是迷宫的路,剩下的就都是墙。最后根据这些数据把迷宫画出来就行。”
小哥的眉头皱得更紧,显然还没完全听明白。
谢维康见状,到吧台借了纸笔,在纸上随便画了个小迷宫,一边在里面画线,一边接着解释。
最后他总结道:“我的意思是,你别管墙不墙的,就当地图上有隐形的墙,奇数行列上的点全是墙。你要做的,就是模拟从入口到出口的过程,遍历整个地图,能穿透这些隐形的墙,找出所有能走的路。既然所有能走的路都找到了,剩下的不就全是墙了吗?”
这番解释让小哥豁然开朗,他一边点头一边重复并总结谢维康说的方法:“哦,我懂了!你是说从入口开始找路,遇到死路就回头换条路,一直找,直到把全地图的路都找出来,对不对?”
谢维康松了口气,总算能顺着这个话茬往下说。
可小哥又冒出新问题:“那怎么确保这条路能和出口连上呢?”
“先,你设置入口和出口时,它们的行号或列号必须是偶数。”谢维康解释道,“这样一来,入口和出口肯定能和路的节点连上,两者之间至少会有一条通路。至于会不会有第二条通路,我就不确定了,毕竟我没写过这么复杂的逻辑。”
说到这儿,他故作深沉地纠正道:“哦对了,我刚才有个地方说错了。c语言的数组下标是从o开始的,所以奇数行列对应的数组下标其实是偶数。”
小哥当即给谢维康竖了个大拇指:“嚯,原来可以通过搜索路来确定迷宫数据呐?我之前一直死磕迷宫的墙,你说,我怎么就没想到这个方法呢?刚刚听你这么一分析,我现在是茅塞顿开!”
话音刚落,他就不管谢维康,自己埋头忙活起来。
谢维康看了看时间,已经不早了,他点开qq,李梅还是没回复消息。
虽说他一直告诉自己,已经把对李梅的感情压在心底,可此刻还是忍不住露出一丝失落。
他利索地收拾好物品,关掉电脑,跟小哥道别后,离开网吧回了家。
……
翌日下午收工后,谢维康又去了网吧,刚在电脑上开始下载安装vc++o,就有人从后面拍了拍他的肩膀。
他转头一看,正是昨晚遇到的那个小哥。
小哥拍着他的肩膀,笑容灿烂地夸道:“兄弟,你可真有两下子!昨天你走后,我按你说的方法写了段代码,居然真成了,我给你看看……”
说着,小哥打开谢维康右边的电脑,往主机上插了个小东西,接着在“我的电脑”里点开一个文件夹,没一会儿就把vc++o装好了。
谢维康疑惑地问:“你插在电脑上的这是什么?怎么没见你下载,vc++o就装上了?”
小哥一边摆弄电脑,一边回答说:“哦,你说这个啊,这是u盘,用来存数据的。”
谢维康觉得这东西不错,又追问道:“多少钱一个?”
“我这个是b的,花元买的。”小哥解释说。
谢维康惊呼道:“啥?元?这么贵?”
小哥看了他一眼,继续说道:“我买得早,现在b的差不多也就这个价。”
这章没有结束,请点击下一页继续阅读!
可这个价格还是让谢维康吓了一跳,就这么个小玩意儿,得他在装修工地上辛辛苦苦干八九天活才能买到。他暂时打消了买u盘的念头。
小哥装好vc++o后,打开自己写的代码,指着屏幕说道:“你看,这就是我写的代码。按你说的思路写完后,只要在右键菜单里执行一个命令,一秒钟就能生成一个迷宫,感觉比我自己画的还合理。”
说着,他按下f,屏幕上弹出一个窗口。他熟练地操作着界面,点了几下后,右键调出菜单,搓着手对谢维康说道:“来了哟,兄弟,见证奇迹的时刻到了,你看……”
话音未落,他用鼠标点了一下菜单里的命令。不到一秒钟,屏幕上就出现了一个和他之前画的差不多的迷宫。
小哥激动地喊道:“兄弟,我太爱你了!”
说着就要往谢维康身上扑,谢维康赶紧拦住他,用力推开,抱怨道:“哎哎哎!你干什么?两个大男人在公共场合搂搂抱抱的,像话吗?跟你说,我是有女朋友的,不搞基!你这一激动,我差点‘贞洁不保’了!”
小哥没把他的抱怨当回事,伸出手自我介绍道:“兄弟,我叫段雷,是成都理科大学的学生。还没请教你的尊姓大名?”
谢维康伸手和他握了握,介绍道:“我叫谢维康,已经没上学了。”
段雷疑惑地问道:“没上学了?那你编程技术怎么这么好?”
谢维康心里满是委屈,自己就随便跟他聊了几句,怎么就帮他把这么个难题解决了呢?这也太不科学了。