定義乙個二維陣列:
int maze[5][5] = queue[26];
int head=0,tail=0,a[5][5],book[5][5];
void function(int tail) //引數是隊尾;
else function(queue[tail].f); //如果隊尾的父節點不是0;就將該父節點作為新的隊尾繼續呼叫;
//這是每次回溯要執行的部分
printf("(%d, %d)\n",queue[queue[tail].f].x,queue[queue[tail].f].y);
} //注意,因起初引數是隊尾,所以此函式列印不了目標座標,只能列印到目標座標的父節點座標;
int main(),,,};
while(head4||ty<0||ty>4||a[tx][ty]==1)
continue; //判斷是否越界,是否重走,是否有障礙物;
book[tx][ty]=1; //標記為走過;
queue[tail].x=tx; //把該點壓入佇列;
queue[tail].y=ty;
queue[tail].f=head; //記錄該點的父親;
queue[tail].step=queue[head].step+1; //走到該點是其父節點的步數加一;
tail++; //接著擴充套件佇列
if(tx==4&&ty==4) //判斷是否到達目的地;
}if(flag==1)
break;
head++; //對乙個點的所有擴充套件完成後,將該點出列,即head++;
} tail--; //因為結束時tail指向了隊尾的下乙個元素;
function(tail); //列印路徑;
printf("(4, 4)\n"); //最後把目標座標列印,原因看function函式;
return 0;
}
迷宮問題(廣搜與深搜)
定義乙個二維陣列 int maze 5 5 它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。input 乙個5 5的二維陣列,表示乙個迷宮。資料保證有唯一解。output 左上角到右下角的最短路徑,格式如樣例所示。sa...
廣搜 快走迷宮
有乙個mn格的迷宮 表示有m行 n列 其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,檔案讀入這mn個資料和起始點 結束點 起始點和結束點都是用兩個資料來描述的,分別表示這個點的行號和列號 現在要你程式設計找出最短的道路,要求所走的路中沒有重複的點,走時只能是上下左右四個方向。如果一條...
迷宮 II 廣搜
問題描述 山山厭倦了普通的迷宮,他準備挑戰奇妙的迷宮 ii。迷宮 ii 是由若干三角形拼成的六邊形 見樣例 其中有些點可以通過,有些點不能通過。你需要計算從起點走到終點至少要經 過多少點 不包括起點終點 輸入格式 第一行,乙個整數 n,表示地圖邊長 接下來若干行字串,表示乙個地圖。其中.表示可以經過...