国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

迷宮求解最短路徑問題java版

2019-11-14 11:39:08
字體:
供稿:網(wǎng)友

對于計算機(jī),面對錯亂復(fù)雜的迷宮探路問題也不可能一步就找到最優(yōu)路徑,而是把所有可行路徑全部走過然后通過比較找出最優(yōu)路徑,對于每走一步都有4個可行方向可走,然后通過循環(huán)借助計算機(jī)的高效率找出最優(yōu)路徑。代碼如下:

public class Maze {//出口目標(biāo)點(diǎn)坐標(biāo)PRivate static final int X = 8;private static final int Y = 8;private static final int MaxSize = 200;//迷宮路徑int[][] maze = {{1,1,1,1,1,1,1,1,1,1},{1,0,0,1,0,0,0,1,0,1},{1,0,0,1,0,0,0,1,0,1},{1,0,0,0,0,1,1,0,0,1},{1,0,1,1,1,0,0,0,0,1},{1,0,0,0,1,0,0,0,0,1},{1,0,1,0,0,0,1,0,0,1},{1,0,1,1,1,0,1,1,0,1},{1,1,0,0,0,0,0,0,0,1},{1,1,1,1,1,1,1,1,1,1},};Node Stack[] = new Node[MaxSize];Node Path[] = new Node[MaxSize];//棧頂指針int top = -1;//路徑的計數(shù)int count = 1;//記錄最短路徑int minlen = MaxSize;public Maze() {System.out.println("路徑如下:");mazePath(1,1,X,Y);}//尋路方法public void mazePath(int xi,int yi,int xe,int ye){int i,j,di,find;//初始化棧 起始地點(diǎn)入棧top++;Node n = new Node();Stack[top] = n;System.out.println(Stack[top]);Stack[top].i = xi;Stack[top].j = yi;Stack[top].di = -1;maze[xi][yi] = -1;//如果棧不為空就繼續(xù)探路while(top>-1){//取出棧頂元素i = Stack[top].i;j = Stack[top].j;di = Stack[top].di;//判斷是否已經(jīng)找到目標(biāo)點(diǎn)出口  如果找到出口那么打印路徑if(i==xe && j ==ye){System.out.println("  "+(count++));for(int k = 0;k <= top;k++){System.out.printf("(%d , %d)",Stack[k].i,Stack[k].j);//每行打印5個坐標(biāo)點(diǎn)然后換行if((k+1)%5==0){System.out.println("");}}System.out.println("");//找出最短路徑  然后賦值給Pathif(top+1 < minlen){minlen = top+1;System.out.println(minlen+"");for(int k = 0;k <= top;k++){Node node = new Node();Path[k] = node;Path[k].i = Stack[k].i;Path[k].j = Stack[k].j;Path[k].di = Stack[k].di;}}//退出一步繼續(xù)查找可行路徑maze[Stack[top].i][Stack[top].j] = 0;top--;i = Stack[top].i;j = Stack[top].j;di = Stack[top].di;}//根據(jù)四個方向試探性的查找可行路徑find = 0;//用來標(biāo)記是否已經(jīng)找到可行路徑  0 沒找到  1找到while(find==0 && di<4){di++;switch(di){           case 0: i = Stack[top].i-1;j = Stack[top].j;break;           case 1: i = Stack[top].i;j = Stack[top].j+1;break;           case 2: i = Stack[top].i+1;j = Stack[top].j;break;           case 3: i = Stack[top].i;j = Stack[top].j-1;break;           }//如果找到可行路徑那么find標(biāo)記為1if(maze[i][j] == 0){find = 1;}}if(find == 1){//如果找到出口那么進(jìn)棧Stack[top].di = di;  //進(jìn)棧前記錄當(dāng)前立腳點(diǎn)的尋路方向top++;Node n1 = new Node();Stack[top] = n1;Stack[top].i = i;Stack[top].j = j;Stack[top].di = -1;//已走過路徑標(biāo)記為-1防止重復(fù)路過maze[i][j] = -1;}else{//否則退一步,然后繼續(xù)試探可行路徑maze[Stack[top].i][Stack[top].j] = 0;  //釋放路徑 為了以后的試探讓路top--;}}//一切執(zhí)行結(jié)束后打印最短路徑System.out.println("最短路徑如下:");System.out.println("最短路徑長度:"+minlen);System.out.println("路徑:");//打印最短路徑for(int k = 0;k < minlen;k++){System.out.printf("(%d , %d)",Path[k].i,Path[k].j);if((k+1)%5 == 0){System.out.println("");}}System.out.println("");}class Node{int i;int j;int di;}public static void main(String[] args) {new Maze();}}


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 兴仁县| 钦州市| 庄河市| 安宁市| 漳平市| 商丘市| 六枝特区| 上蔡县| 韩城市| 班玛县| 海城市| 林周县| 苍梧县| 长汀县| 布尔津县| 怀宁县| 阿巴嘎旗| 基隆市| 河源市| 兰溪市| 孝昌县| 社会| 炎陵县| 张家川| 宜昌市| 泉州市| 迭部县| 宝山区| 乐业县| 普兰县| 密云县| 呼玛县| 灵宝市| 高安市| 肇州县| 合作市| 莆田市| 新津县| 栾城县| 东乡县| 阳谷县|