真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C++實現(xiàn)迷宮問題-創(chuàng)新互聯(lián)

新建一個.txt文檔來存儲迷宮,輸入n*n的迷宮矩陣并保存起來,如下圖

成都創(chuàng)新互聯(lián)公司憑借專業(yè)的設計團隊扎實的技術支持、優(yōu)質高效的服務意識和豐厚的資源優(yōu)勢,提供專業(yè)的網(wǎng)站策劃、成都網(wǎng)站設計、網(wǎng)站建設、網(wǎng)站優(yōu)化、軟件開發(fā)、網(wǎng)站改版等服務,在成都十年的網(wǎng)站建設設計經驗,為成都成百上千中小型企業(yè)策劃設計了網(wǎng)站。

C++實現(xiàn)迷宮問題

//Stack.h

#pragma once

template 
class stack
{

public:
	stack()        //構造函數(shù)
		:_arr(NULL)
		, _top(0)
		, _capacity(0)
	{}
	~stack()          //析構函數(shù)
	{
		if (_arr)
		{
			delete[] _arr;
		}
	}
public:
	void Push(const T& x)         //插入
	{
		_CheckCapacity();
		_arr[_top++] = x;
	}
	void Pop()          //刪除
	{
		assert(_top > 0);
		--_top;
	}
	size_t Size()         //大小
	{
		return _top;
	}
	bool Empty()         //判斷棧是否為空
	{
		//return _top == 0;
		if (_top <= 0)
		{
			return true;
		}
		else
			return false;
	}
	T& Top()        //獲取棧頂元素
	{
		return _arr[_top - 1];
	}

protected:
	void _CheckCapacity()
	{
		if (_arr == NULL)
		{
			_capacity = 5;
			_arr = new T[_capacity];
			return;
		}
		else if (_top == _capacity)
		{
			_capacity *= 2;
			T* tmp = new T[_capacity];
			for (size_t i = 0;i < _top;++i)
			{
				tmp[i] = _arr[i];
			}
			delete[] _arr;
			_arr = tmp;
		}
	}
protected:
	T* _arr;
	size_t _top;
	size_t _capacity;
};

//Maze.cpp

#define _CRT_SECURE_NO_WARNINGS 1

#include 
using namespace std;

#include 
#include "Stack.h"

struct Pos
{
	int _row;
	int _col;
};

//函數(shù)聲明
void GetMaze(int* a, int n);
bool SearchMazePath(int *a, int n, Pos entrance, stack& paths);
bool CheckIsAccess(int* a, int n, const Pos& next);

void GetMaze(int* a, int n)   //將迷宮存到一個一維數(shù)組a里
{
	assert(a);
	FILE* fout = fopen("E:\\MazeMap.txt", "r");    //以讀的方式讀取迷宮矩陣
	assert(fout);
	for (int i = 0;i < n;++i)
	{
		for (int j = 0;j < n;)
		{
			char ch = fgetc(fout);
			if (ch == '1' || ch == '0')    //矩陣中‘0’為通路
			{
				a[i*n + j] = ch - '0';
				cout << a[i*n + j]<<" ";
				++j;
			}
		}
		cout << endl;
	}
	cout << endl;
}

bool CheckIsAccess(int* a, int n, const Pos& next)
{
	int row = next._row;
	int col = next._col;
	if (row >= 0 && row < n && col >= 0 && col < n && a[row*n + col] == 0)
	{
		return  true;
	}
	else
	{
		return false;
	}
}

//尋找通路,并用棧來存儲
bool SearchMazePath(int *a, int n, Pos entrance, stack& paths)  
{
	assert(a);
	paths.Push(entrance);
	bool isfirst = true;
	while (!paths.Empty())
	{
		Pos cur = paths.Top();
		a[cur._row*n + cur._col] = 7;   //將通路標記為7
		
		if (isfirst == false || cur._row == n - 1 || cur._col == n - 1 
			|| cur._row == 0 || cur._row == 0 )    //如果找到矩陣的四個邊就表示找到通路
		{
			return true;
		}
		Pos next = cur;

		//判斷當前元素的上路是否為通路,即是否為‘0’
		next._row--;
		if (CheckIsAccess(a, n, next))
		{
			paths.Push(next);
			continue;
		}

		//判斷當前元素的下路是否為通路
		next = cur;
		next._row++;
		if (CheckIsAccess(a, n, next))
		{
			paths.Push(next);
			continue;
		}

		//判斷當前元素的左路是否為通路
		next = cur;
		next._col--;
		if (CheckIsAccess(a, n, next))
		{
			paths.Push(next);
			continue;
		}

		//判斷當前元素的右路是否為通路
		next = cur;
		next._col++;
		if (CheckIsAccess(a, n, next))
		{
			paths.Push(next);
			continue;
		}

		paths.Pop();
		isfirst = false;
	}
	return false;
}

//打印迷宮矩陣
void PrintMaze(int* a, int n)
{
	for (int i = 0;i < n;++i)
	{
		for (int j = 0;j < n;++j)
		{
			cout << a[i*n + j] << " ";
		}
		cout << endl;
	}
	cout << endl;
}


int main()
{
	int size = 5;
	int mazemap[25] = { 0 };
	Pos entrance;
	entrance._row = 1;
	entrance._col = 0;
	stack path;

	GetMaze(mazemap, size);
	if (SearchMazePath(mazemap, size, entrance, path))
	{
		PrintMaze(mazemap, size);
	}

	system("pause");
	return 0;
}

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


分享標題:C++實現(xiàn)迷宮問題-創(chuàng)新互聯(lián)
文章位置:http://weahome.cn/article/gcgpd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部