#數據結構# 隊列 求解迷宮問題

typedef struct{
	int i;	//當前方位的行號 
	int j;	//當前方位的列號 
	int pre;	//本路徑中上一方塊在隊列中的下標 
} Box; 
typedef struct{
	Box data[MaxSize];
	int front,rear ;	//隊頭隊尾指針 
} QuType; 
bool mgpath(int xi,int yi,int xe,int ye){
	int i,j,di,find=0;
	QuType qu; //定義順序隊 
	qu.front=qu.rear=-1;
	qu.rear++;
	qu.data[qu.rear].i=xi;
	qu.data[qu.rear].j=yi;
	qu.data[qu.rear].pre=-1;
	mg[xi][yi]=-1; //將其賦值爲-1,避免重複搜索此節點 
	while(qu.front!=qu.rear&&!find){
		qu.front++;//出隊 
		i=qu.data[qu.front].i;
		j=qu.data[qu.front].j;
		if(i==xe&&j==ye){ //找到了出口,輸出路徑 
			find=1;
				print(qu,qu.front);
				return true;
		}
		for(di=0;di<4;di++){
			switch di{
			case 0:
				i=qu.data[qu.front].i-1;
				j=qu.data[qu.front].j;
				break;
			case 1:
				i=qu.data[qu.front].i;
				j=qu.data[qu.front].j+1;
				break;
			case 2:
				i=qu.data[qu.front].i+1;
				j=qu.data[qu.front].j;
				break;
			case 3:
				i=qu.data[qu.front].i;
				j=qu.data[qu.front].j-1;
				break;
			}
			if(mg[i][j]==0){
				qu.rear++; //將這個方塊出入到隊列中 
				qu.data[qu.rear].i=i;
				qu.data[qu.rear].j=j;
				qu.data[qu.rear].pre=qu.front;
				mg[i][j]=-1;
			}
		}
	} 
	return false;
} 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章