亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? migong.cpp

?? 本程序是迷宮類.用類來定義和求解一個迷宮問題.
?? CPP
字號:
/* 
Matrix:矩陣類 
offsets:搜索偏移 
enum directions:四個方向 
struct item:搜索節點 
Migong:迷宮類 
1.創建一個Migong對象 
2.使用用Create方法輸入數據 
3.使用Solve方法進行求解 
4.ShowSolve方法顯示解 
5.可以重復使用Create方法 
6.入口只能在左上角 
7.默認出口在右下角 
ShowAllPath:窮舉所有的路徑 
備注: 
由于算法原因,這里的所有路徑應該是指介于: 
a.如果兩條路存在某個點不同那么就是不同的路 
b.如果在一條路中去掉一個或者一個以上的圈,那么他們是同一條路之間意義上的路 
*/ 

#include <iostream> 
#include <stack> 
#include <vector> 

using namespace std; 

#ifndef MIGONG_H 
#define MIGONG_H 
 
//////////////////////////矩陣類////// /////////////////// 

class Matrix
{ 
	int* m; 
	int row, col; 
	bool iscreate; 
	
public: 
	Matrix(){m=0;iscreate=false;}; //構造函數
	~Matrix() {Release();}; //析構函數
	bool Create(int, int); 
	int& operator () (int, int); 
	int GetRow(){return row;}; 
	int GetCol(){return col;}; 
	void Release(); 
	void Show(char, char ); 
}; 


bool Matrix::Create(int r, int c) 
{ 
	if( r<=0 || c<=0) return false; 
	
	Release(); 
	
	row = r; 
	col = c; 
	m = new int[row*col]; 
	
	for (int i=0;i<row*col;i++) 
	{ 
		*(m+i) = 0; 
	} 
	iscreate = true; 
	return true; 
} 


int& Matrix::operator ()(int r, int c) 
{ 
return *(m+r*col+c); 
} 


void Matrix::Release() 
{ 
	if (iscreate) 
	{ 
		row = col = 0; 
		if (m) delete[] m; 
		m = 0; 
	} 
	iscreate = false; 
} 


void Matrix::Show(char blk='#', char nblk=' ') 
{ 
	int i, j; 
	for (i=0;i<row;i++) 
	{ 
		for (j=0;j<col;j++) 
		{ 
			if (*(m+i*col+j) == 0) 
				cout<<nblk; 
			else 
				cout<<blk; 
		} 
		cout<<endl; 
	} 
} 
///////////////////////////// 
////迷宮相關數據結構的定義/// 
///////////////////////////// 
struct offsets		//搜索偏移
{ 
	int a, b; 
}; 

enum directions		//按順時針方向來找
{ 
	_S = 0, 
	_E, 
	_N, 
	_W 
}; 

struct item			//搜索節點
{ 
int row, col, dir; 
}; 

class Migong
{ 
	static offsets move[4];
	Matrix maze; 
	Matrix mark; 
	int row; 
	int col; 
	int desr; 
	int desc; 
	stack<item> stk; 
	bool iscreate; 
	int pathlength; 
	bool GetPath(); 
	bool IsInPath(int, int); 
public: 
	Migong(){issolved=false;result=0;pathlength=row=col=0;iscreate=false;}; 
	~Migong(){Release();}; 
	bool Create(int* , int , int , int , int ); 
	void Solve(); 
	void Release(); 
	void OutputMaze(); 
	void ShowSolve(char, char ); 
public: 
	bool issolved; 
	item* result; 
}; 

offsets Migong::move[4]={ {1, 0}, {0, 1}, 
{-1, 0}, {0, -1}}; 

//////////////////////////// 
//迷宮數據應該是不含邊框的// 
//////////////////////////// 
bool Migong::Create(int* m, int r, int c, int desrow=-1, int descol=-1) 
{ 
if (r<=0 || c<=0) return false; 

Release(); 

if (desrow==-1 || descol==-1) 
{ 
desr = r; 
desc = c; 
} 
else 
{ 
desr = desrow; 
desc = descol; 
} 

row = r; 
col = c; 
maze.Create(r+2, c+2); 
mark.Create(r+2, c+2); 

int i, j; 

for (i=0;i<r+2;i++) 
{ 
for (j=0;j<c+2;j++) 
{ 
if (j==0 || j==c+1 || i==0 || i==r+1) 
{ 
mark(i, j) = maze(i, j) = 1; 

}else 
{ 
mark(i, j) = 0; 
maze(i, j) = m[((i-1)*col+j-1)]; 
} 
} 
} 
return iscreate = true; 
} 

bool Migong::GetPath() 
{ 
mark(1,1) = 1; 
item temp; 
temp.col = 1; 
temp.row = 1; 
temp.dir = _S; 
stk.push(temp); 

while (!stk.empty()) 
{ 
temp = stk.top(); 
stk.pop(); 

int i = temp.row; 
int j = temp.col; 
int d = temp.dir; 

while (d<4) 
{//根據當前點的狀態確定下一個搜索點 
int g = i + move[d].a; 
int h = j + move[d].b; 

if (g==desr && h==desc) 
{ 
return true; 
} 
//如果這個點不是障礙點且沒有被搜索過那么可以對這個點進行搜索 
if (maze(g, h)==0 && mark(g, h)==0) 
{ 
mark(g, h) = 1; 
temp.row = g; 
temp.col = h; 
temp.dir = d+1; 
stk.push(temp); 
i = g; 
j = h; 
d = _S;//對一下個點進行搜索 
} 
else d++; 
} 
} 
return false; 
} 

void Migong::Solve() 
{ 
issolved = GetPath(); 
if (issolved) 
{ 
pathlength = stk.size(); 
result = new item[pathlength]; 
for (int i=0;i<pathlength;i++) 
{ 
*(result+i) = stk.top(); 
stk.pop(); 
// cout<<"("<<(*(result+i)).row<<","<<(*(result+i)).col<<")"<<endl; 
} 
} 
while (!stk.empty()) 
stk.pop(); 
} 

void Migong::Release() 
{ 
if (iscreate) 
{ 
maze.Release(); 
mark.Release(); 
row=col=0; 
if (result) 
delete [] result; 
result = 0; 
while (!stk.empty()) 
stk.pop(); 
} 
iscreate = false; 
issolved = false; 
pathlength = 0; 
} 

void Migong::OutputMaze() 
{ 
if (!iscreate) return; 
maze.Show(); 
} 

bool Migong::IsInPath(int r, int c) 
{ 
if (!iscreate || !issolved) 
return false; 

item temp; 
for (int i=0;i<pathlength;i++) 
{ 
temp = *(result+i); 
if ((temp.row==r) && (temp.col==c)) 
return true; 
} 

return false; 
} 

void Migong::ShowSolve(char blk='#',char s='o') 
{ 
if (!iscreate) return; 
if (!issolved) 
{ 
cout<<"無解"<<endl; 
} 
else 
{ 
int i, j; 
for (i=0;i<row+2;i++) 
{ 
for (j=0;j<col+2;j++) 
{ 
if ((i==1 && j==1) || (i==desr && j==desc)) 
{ 
cout<<s; 
} 
else if (maze(i, j) == 1) 
{ 
cout<<blk; 
}else 
{ 
if (IsInPath(i, j)) 
cout<<s; 
else 
cout<<' '; 
} 
} 
cout<<endl; 
} 
} 
} 

////////////////////// 
//////窮舉所有路徑//// 
////////////////////// 
offsets move[4]={ {1, 0}, {0, 1}, 
{-1, 0}, {0, -1}}; 

struct node 
{ 
int row,col; 
}; 

vector<node> path; 
int count; 
bool IsReachable( Matrix& maze, Matrix& mark, node beg, node des) 
{ 
if (beg.row==des.row&&beg.col==des.col) 
{//如果達到的話那么顯示路徑 
count++; 
cout<<"第"<<count<<"條路徑:"<<endl; 
for (int i=0;i<path.size();i++) 
cout<<"("<<path[i].row<<","<<path[i].col<<")"; 
cout<<"("<<des.row<<","<<des.col<<")"; 
cout<<endl; 
return false; 
} 
if (maze(beg.row, beg.col)==1 || mark(beg.row, beg.col)==1) 
{ 
return false; 
} 

path.push_back(beg); 
mark(beg.row, beg.col) = 1; 

node nextnode; 

for (int i=_S;i<_W+1;i++) 
{ 
nextnode.row = beg.row + move[i].a; 
nextnode.col = beg.col + move[i].b; 

IsReachable(maze, mark, nextnode, des); 
} 

path.resize(path.size()-1); 
mark(beg.row, beg.col) = 0; 

return false;//如果不是窮舉的話應該根據for循環的結果重新設置返回值 
} 

/* 
參數maze,mark為迷宮長寬均加二的矩陣 
desr,desc為出口點 
*/ 
void FindAllPath( Matrix& maze, Matrix& mark, int desr, int desc) 
{ 
node first, last; 
first.row = 1; 
first.col = 1; 
last.row = desr; 
last.col = desc; 

IsReachable(maze, mark, first, last); 

path.clear(); 
} 

/* 
m迷宮矩陣數據 
r,c行和列的大小 
desr,desc目標位置 
*/ 
void ShowAllPath(int* m, int r, int c, int desr=-1, int desc=-1) 
{ 
Matrix maze, mark; 
maze.Create(r+2, c+2); 
mark.Create(r+2, c+2); 

if (desr==-1 || desc==-1) 
{ 
desr = r; 
desc = c; 
} 

int i, j; 

for (i=0;i<r+2;i++) 
{ 
for (j=0;j<c+2;j++) 
{ 
if (j==0 || j==c+1 || i==0 || i==r+1) 
{ 
mark(i, j) = maze(i, j) = 1; 

}else{ 
mark(i, j) = 0; 
maze(i, j) = m[((i-1)*c+j-1)]; 
} 
} 
} 

count = 0; 
FindAllPath(maze, mark, desr, desc); 

maze.Release(); 
mark.Release(); 
} 
#endif

int main()
{
	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人精品一区二| 天天综合天天做天天综合| 成人午夜电影小说| 中文字幕日韩一区| 日本精品视频一区二区三区| 亚洲午夜免费视频| 欧美mv日韩mv| 成人精品鲁一区一区二区| 亚洲高清免费一级二级三级| 欧美精品一区二区三区视频| 91丨九色丨黑人外教| 热久久一区二区| 综合激情网...| 国产精品午夜在线| 国产性色一区二区| 91在线云播放| 色婷婷一区二区三区四区| www.色精品| 亚洲一区二区黄色| 久久久久国色av免费看影院| 在线观看亚洲成人| 国产一区二区不卡在线| 有坂深雪av一区二区精品| 精品日韩av一区二区| 91丨九色丨黑人外教| 94色蜜桃网一区二区三区| 成人免费看片app下载| 一本色道久久综合亚洲精品按摩| 国产伦精品一区二区三区免费迷 | 久久久精品tv| 日韩午夜av一区| 精品久久久久香蕉网| 4438成人网| 国产亚洲综合在线| 久久精品国产精品亚洲精品| 亚洲欧美日本在线| 亚洲成人动漫在线免费观看| 成人午夜伦理影院| 欧美日韩国产免费一区二区 | 国产精品少妇自拍| 亚洲精品欧美激情| 美国十次了思思久久精品导航| 蜜桃av一区二区在线观看| 国产一区二区看久久| 欧美最新大片在线看| 亚洲欧洲av色图| 偷拍与自拍一区| 97精品视频在线观看自产线路二| 在线看国产日韩| 久久人人97超碰com| 一区在线观看视频| 乱中年女人伦av一区二区| 国产高清在线精品| 欧美日韩不卡在线| 亚洲天天做日日做天天谢日日欢| 亚洲va国产va欧美va观看| 成人污污视频在线观看| 日韩欧美的一区| 久久精品国产**网站演员| 欧美日韩成人一区| 日本aⅴ精品一区二区三区| 欧美老年两性高潮| 欧美激情在线一区二区三区| 粉嫩久久99精品久久久久久夜| 欧美一区二区三区免费| 午夜欧美2019年伦理| 欧美日韩一本到| 亚洲综合成人网| 欧美肥大bbwbbw高潮| 香蕉成人啪国产精品视频综合网| 在线观看国产日韩| 一片黄亚洲嫩模| 一本到不卡免费一区二区| 国产精品免费aⅴ片在线观看| 国产精品一二三| 成人欧美一区二区三区视频网页| 国产盗摄女厕一区二区三区| 国产婷婷精品av在线| jiyouzz国产精品久久| 亚洲精品中文在线观看| 欧美日韩视频在线一区二区| 秋霞成人午夜伦在线观看| 精品少妇一区二区三区在线视频| 久久精品国产精品青草| 国产精品青草久久| 欧美日韩午夜影院| 国产精品99久| 视频一区二区三区入口| 久久人人爽人人爽| 色婷婷久久久久swag精品| 捆绑调教一区二区三区| 国产亚洲成av人在线观看导航| 91在线观看视频| 久久疯狂做爰流白浆xx| 亚洲理论在线观看| 国产欧美一区二区精品性色超碰 | 一区二区在线观看av| 精品国产髙清在线看国产毛片| av综合在线播放| 久久精品国产一区二区| 亚洲va国产va欧美va观看| 亚洲天堂2014| 亚洲精品福利视频网站| 日本一区二区三区国色天香| 欧美大片日本大片免费观看| 91久久精品一区二区三区| 不卡的看片网站| 色综合天天综合在线视频| 国产成a人亚洲| 成人免费观看男女羞羞视频| 国产在线精品一区二区三区不卡| 日韩欧美精品在线| 日韩欧美另类在线| 精品国产乱码久久久久久蜜臀| 欧美日韩三级视频| 欧美一区二区免费视频| 欧美一二三区在线| 欧美sm美女调教| 国产精品天美传媒| 亚洲午夜免费视频| 久久精品国产一区二区三区免费看| 免费在线观看一区二区三区| 麻豆91精品视频| 波多野结衣91| 制服丝袜国产精品| 欧美韩国一区二区| 亚洲成人在线网站| 国产不卡视频在线观看| 欧美影院午夜播放| 久久综合色婷婷| 伊人开心综合网| 国产麻豆91精品| 欧美人xxxx| 一区二区三区四区视频精品免费 | 97久久精品人人爽人人爽蜜臀| 欧美在线啊v一区| 国产亚洲精品资源在线26u| 亚洲成人一区在线| 99re这里都是精品| 337p日本欧洲亚洲大胆色噜噜| 亚洲男女一区二区三区| 国产福利一区在线观看| 欧美一级二级在线观看| 亚洲一区精品在线| 色综合久久久久| 亚洲视频精选在线| 成人黄色国产精品网站大全在线免费观看| 亚洲一区二区在线视频| 成人激情黄色小说| 欧美国产欧美亚州国产日韩mv天天看完整 | 亚洲最色的网站| 91黄色免费看| 亚洲欧美欧美一区二区三区| eeuss鲁片一区二区三区| 中文字幕第一区| 国产91精品免费| 国产亚洲一区二区三区四区| 久草在线在线精品观看| 欧洲一区二区av| 日韩精品色哟哟| 久久天堂av综合合色蜜桃网| 国产精品一区二区三区99| 国产日韩欧美精品电影三级在线| 高清beeg欧美| 午夜久久福利影院| 久久综合九色综合欧美98| 高清成人免费视频| 亚洲国产一区二区三区| 欧美成人精品高清在线播放| 国产成人综合视频| 亚洲国产乱码最新视频| 日韩免费看网站| 日本精品视频一区二区三区| 免费的国产精品| 亚洲欧洲av一区二区三区久久| 91精品婷婷国产综合久久性色| 国产一区亚洲一区| 亚洲va国产天堂va久久en| 国产精品理伦片| 欧美成人官网二区| 欧美日本不卡视频| 在线精品亚洲一区二区不卡| 国产精品中文有码| 男人的j进女人的j一区| 亚洲一区在线视频| 一区二区中文视频| 国产精品久久久久永久免费观看 | 国产不卡视频在线观看| 喷白浆一区二区| 午夜精品福利视频网站| 亚洲欧美一区二区久久| 国产精品毛片a∨一区二区三区| 久久综合色婷婷| 国产亚洲一二三区| 亚洲国产精品黑人久久久| 日本一区二区三区免费乱视频| 久久久欧美精品sm网站| 国产亚洲精品免费| 国产精品久久久爽爽爽麻豆色哟哟 | 日韩一级精品视频在线观看|