BFS

简单bfs
#define MAXN 5
int n, m;
int Q[MAXN*MAXN];
bool vis[MAXN][MAXN];
bool maze[MAXN][MAXN];
int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};
int dir[MAXN*MAXN];
int lastDir[MAXN][MAXN];
int fa[MAXN][MAXN];
//int dist[MAXN][MAXN];

void BFS(int x, int y);
void PrintPath(int x, int y);

int main()
{
	n = m = 5;
	memset(maze, 0, sizeof(maze));
	memset(vis, 0, sizeof(vis));
	memset(dir, 0, sizeof(dir));
	memset(lastDir, 0, sizeof(lastDir));
	memset(fa, 0, sizeof(fa));
//	memset(dist, 0, sizeof(dist));
	for (int r = 0; r < n; r++)
	{
		for (int c = 0; c < m; c++)
		{
			scanf("%d", &maze[r][c]);
		}
	}
	BFS(0, 0);
	PrintPath(4, 4);
}

void BFS(int x, int y)
{
	int front, rear, d, u;	 
	front = rear = 0;
	u = x * m + y;
	vis[x][y] = 1;
	fa[x][y] = u;	
//	dist[x][y] = 0;	
	Q[rear++] = u;
	while (front < rear)
	{
		u = Q[front++];
		x = u / m;
		y = u % m;
		for (d = 0; d < 4; d++)
		{
			int nx = x + dx[d];
			int ny = y + dy[d];
			if (0 <= nx && nx < n && 0 <= ny && ny < m && !maze[nx][ny]	&& !vis[nx][ny])
			{
				int v = nx * m + ny;
				Q[rear++] = v;
				vis[nx][ny] = 1;
				fa[nx][ny] = u;
			//	dist[nx][ny] = dist[x][y] + 1;
				lastDir[nx][ny] = d;
			}
		}
	}
}

void PrintPath(int x, int y)
{
	int c = 0;
	for (;;)
	{
		int fx = fa[x][y] / m;
		int fy = fa[x][y] % m;
		if (fx == x && fy == y)
		{
			break;
		}
		dir[c++] = lastDir[x][y];
		x = fx;
		y = fy;
	}
	x = y = 0;
	printf("(%d, %d)\n", x, y);
	while (c--)
	{
		printf("(%d, %d)\n", x += dx[dir[c]], y += dy[dir[c]]);
	}
}
 
以上bfs部分的代码来自刘汝佳的《算法竞赛入门经典》,有小的改动。
 

#define MAXN 
#define DIRNUM 4			// 默认4个方向
int n, m;					// n*m的区域
int myQueue[MAXN*MAXN];		// 队列
bool vis[MAXN][MAXN];		// visit, 访问标记数组(需初始化)
bool maze[MAXN][MAXN];		// 地图
int dir[MAXN*MAXN];			// PrintPath()内,用于保存递归得到的方向
int lastDir[MAXN][MAXN];	// 从前一个点到当前点的方向
int fa[MAXN][MAXN];			// 当前点的前一个位置
int dist[MAXN][MAXN];		// 当前点与起点的距离
int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};	// 控制方向,↑→↓←
 
 
 
 
 

原文链接: https://www.cnblogs.com/submarinex/archive/2011/04/20/2022380.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    BFS

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/24308

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 上午2:09
下一篇 2023年2月8日 上午2:09

相关推荐