十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
如图是我修改他人代码得到的。因为C画面的墙和路都要占同样1格。
创新互联公司是一家专注于网站设计制作、网站设计与策划设计,东台网站建设哪家好?创新互联公司做网站,专注于网站建设10年,网设计领域的专业建站公司;建站业务涵盖:东台等地区。东台做网站价格咨询:13518219792
如果画偶数宽高则会有路径浪费,所以还是画奇数宽高的好。
部分代码如下:(完整代码请追问)
int main()
{
int i,j;
system("color 2b");
srand((unsigned)time(NULL)); /*初始化随即种子*/
hidden(); /*隐藏光标*/
for(i=0;i=Height+1;i++)
for(j=0;j=Width+1;j++)
if(i==0||i==Height+1||j==0||j==Width+1) /*初始化迷宫*/
map[i][j]=Road;
else map[i][j]=Wall;
create(2*(rand()%(Height/2)+1),2*(rand()%(Width/2)+1)); /*从随机一个点开始生成迷宫*/
for(i=0;i=Height+1;i++) /*边界处理*/
{
map[i][0]=Wall;
map[i][Width+1]=Wall;
}
for(j=0;j=Width+1;j++) /*边界处理*/
{
map[0][j]=Wall;
map[Height+1][j]=Wall;
}
//★百度知道“q839219286”修订,多画一格避免宽高为偶数时没有墙
{ int pH_even= (Height/2)*2, pW_even=(Width/2)*2; //宽高偶数化
map[2][1]=Start; /*给定入口*/
map[pH_even][Width]=End; /*给定出口*/
for(i=1;i=pH_even+1;i++) /*画出迷宫*/
for(j=1;j=pW_even+1;j++)
paint(i,j);
}
game(); /*开始游戏*/
return 0;
}
这个可以用 堆栈 来完成。
用堆栈的基本思路就是。
设置一个起点A。将 A 入栈 。
从A开始找到第一个可以达到的点B。将 B 入栈 。
如果B无路可走。则在A点处重新换一个可达到的点。否则继续 2-3 。直到达到终点。或者五路可走。
详细的解释,这儿有一篇博文:
很简单,这是一个回溯的搜索,
if(maze[x+move[i].x][y+move[i].y]==0)
if(path(maze,move,x+move[i].x,y+move[i].y,step))
这两句的意思是说如果迷宫的maze[x+move[i].x][y+move[i].y]这个位置可以走,那么下一次就从这个位置开始。
step--;
maze[x][y]=0;
这两句是在选择的路径是死路的时候用来撤销标记,返回出发点的语句