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

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

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

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

對(duì)于計(jì)算機(jī),面對(duì)錯(cuò)亂復(fù)雜的迷宮探路問題也不可能一步就找到最優(yōu)路徑,而是把所有可行路徑全部走過然后通過比較找出最優(yōu)路徑,對(duì)于每走一步都有4個(gè)可行方向可走,然后通過循環(huán)借助計(jì)算機(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;//路徑的計(jì)數(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個(gè)坐標(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ù)四個(gè)方向試探性的查找可行路徑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ā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 灵石县| 黑山县| 曲阳县| 隆尧县| 沅陵县| 盐城市| 体育| 龙岩市| 墨竹工卡县| 麟游县| 武山县| 永丰县| 旺苍县| 涪陵区| 汝城县| 崇左市| 满城县| 黄龙县| 四平市| 玉林市| 舞阳县| 大埔区| 淮阳县| 洪雅县| 梨树县| 庆城县| 云龙县| 滦南县| 云梦县| 泉州市| 资兴市| 土默特左旗| 卢湾区| 宜都市| 辽宁省| 马尔康县| 龙海市| 麻江县| 个旧市| 伊宁县| 陇西县|