关于C++的迷宫问题

觋-拂晓 发布于 2011/09/20 18:46
阅读 661
收藏 0
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
int maze[7][7]={{2, 2, 2, 2, 2, 2, 2},
{2, 0, 0, 0, 0, 0, 2},
{2, 0, 2, 0, 2, 0, 2},
{2, 0, 0, 2, 0, 2, 2},
{2, 2, 0, 2, 0, 2, 2},
{2, 0, 0, 0, 0, 0, 2},
{2, 2, 2, 2, 2, 2, 2}};
int startx=1;
int starty=1;
int endx=5,endy=5;
void visit(int x,int y)//这个函数能求出所有的路径吗?
{
	maze[x][y]=1;
	if(x==endx,y==endy)
	{
	
		printf("The path of running out of the maze is given below:\n");
		for(x=0;x<7;x++)
		{
			for(y=0;y<7;y++)
			{
				if(maze[x][y]==2)
					printf("█");
				else if(maze[x][y]==1)
					printf("**");
				else
					printf("  ");
			}
			printf("\n");
		}
	}
	if(maze[x-1][y]==0) 
	{
		visit(x-1,y);
	}
	if(maze[x][y-1]==0)
	{
		visit(x,y-1);
	}
	if(maze[x+1][y]==0)
	{
		visit(x+1,y);
	}
	if(maze[x][y+1]==0)
	{
		visit(x,y+1);
	}

		maze[x][y]=0;//请问这句的作用是什么?为什么要把他的值从1赋为0?

}


int main()
{
	int x,y;
	printf("The map of the mzae is printed below :\n");
	for(x=0;x<7;x++)
	{
		for(y=0;y<7;y++)
		{
			if(maze[x][y]==2)
				printf("█");
			else
				printf("  ");
		}
		printf("\n");
	}
	visit(startx,starty);

	return 0;
}

疑问已经标注在程序中,谢谢!
加载中
0
浪客Dandy
浪客Dandy

maze[x][y]=0 是因为先认为这条路是通的 所以设为1,假如最后不通 则标志为0


我没仔细读这个程序,理论上你这种递归穷举 肯定可以计算出所有可能路径

浪客Dandy
浪客Dandy
另外我想说,研究这个没啥意义
0
觋-拂晓
觋-拂晓

引用来自“浪客Dandy”的答案

maze[x][y]=0 是因为先认为这条路是通的 所以设为1,假如最后不通 则标志为0


我没仔细读这个程序,理论上你这种递归穷举 肯定可以计算出所有可能路径

0不是表示这条路是通的吗?
0
hikari
hikari

void Visit(int x, int y)
{
	if (Maze[x][y] != FLAG_FREE) 
		return; //Exit recursion

	//oh.. It is a visitable position.

	Maze[x][y] = FLAG_FREE_BUSY; //Visiting

	if(x == EndX && y == EndY)
	{
		printf("End\n");
		for(x=0;x<7;x++)
		{
			for(y=0;y<7;y++)
			{
				if(Maze[x][y] == FLAG_FIRM)
					printf("█");
				else if(Maze[x][y] == FLAG_FREE_BUSY)
					printf("**");
				else
					printf("  ");
			}
			printf("\n");
		}
	}

	Visit(x-1, y); //Try visiting left
	Visit(x, y-1); //Try visiting up
	Visit(x+1, y); //Try visiting right
	Visit(x, y+1); //Try visiting down

	Maze[x][y] = FLAG_FREE; //Visited
}

我明白了,换一个写法表达给你看,Visit的前提条件是Maze[x,y]为0。

如果定义一下,会明白一点。

#define FLAG_FREE            0

#define FLAG_FREE_BUSY    1

#define FLAG_FIRM            2

 

返回顶部
顶部