溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C++解迷宮問題

發(fā)布時間:2020-04-14 05:45:53 來源:網(wǎng)絡(luò) 閱讀:397 作者:zgw285763054 欄目:編程語言
#include <iostream>
using namespace std;
#include <stack>
#include <assert.h>

//初始化迷宮
void InitMaze(int* maze,int row, int col)
{
	FILE* fout = fopen("Maze.txt", "r");

	assert(fout);

	for (int i = 0; i < row; ++i)
	{
		for (int j = 0; j < col;)
		{
			char ch = fgetc(fout);

			if (ch == EOF)
			{
				cout<<"Init MazeMap fail"<<endl;
				exit(false);
			}

			if (ch == '1' || ch == '0')
			{
				maze[i * row + j] = ch - '0';
				++j;
			}
		}
	}

	fclose(fout);
}

struct Pos
{
	int _row; //行
	int _col; //列
};

//打印迷宮
void PrintMaze(int* maze, int row, int col)
{
	for (int i = 0; i < row; ++i)
	{
		for (int j = 0; j < col; ++j)
		{
			cout<<maze[i * row + j]<<" ";
		}

		cout<<endl;
	}

	cout<<endl;
}

//判斷當(dāng)前位置是否為0
inline bool CheckIsPassWay(int* maze, int row, int col, Pos pos)
{
	if (pos._row < row && pos._col < col
		&& maze[pos._row * col + pos._col] == 0)
	{
		return true;
	}

	return false;
}

//判斷迷宮是否有出口
bool GetMazePath(int* maze, int row, int col, Pos entry, stack<Pos>& path)
{
	assert(maze);

	path.push(entry);
	maze[entry._row * col + entry._col] = 2;//將走過的路標記為2

	while (!path.empty())
	{
		Pos cur = path.top();
		Pos next = cur;

		if (row-1 == next._row)//找到出口
		{
			return true;
		}

		//判斷右邊是否為0 
		next = cur;
		next._col++;
		if (CheckIsPassWay(maze, row, col, next))
		{
			maze[next._row * row + next._col] = 2;
			path.push(next);
			continue;
		}

		//上
		next = cur;
		next._row--;
		if (CheckIsPassWay(maze, row, col, next))
		{
			maze[next._row * row + next._col] = 2;
			path.push(next);
			continue;
		}

		//下
		next = cur;
		next._row++;
		if (CheckIsPassWay(maze, row, col, next))
		{
			maze[next._row * row + next._col] = 2;
			path.push(next);
			continue;
		}

		//左
		next = cur;
		next._col--;
		if (CheckIsPassWay(maze, row, col, next))
		{
			maze[next._row * row + next._col] = 2;
			path.push(next);
			continue;
		}

		path.pop();//四個方向都不通,返回上一步
	}

	return false;//棧為空,沒有找到出口
}


void TestMaze()
{
	int maze[10][10] = {};
	Pos entry = {1, 0};
	stack<Pos> path;//將走過的路徑保存在棧path中
	InitMaze((int*)maze, 10, 10);
	PrintMaze((int*)maze, 10, 10);
	GetMazePath((int*)maze, 10, 10, entry, path);
	PrintMaze((int*)maze, 10, 10);
}

int main()
{
	TestMaze();
	return 0;
}

C++解迷宮問題

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI