隊列的建立
static queue r = new linkedlist(); //創建隊列(學習視頻分享:java課程)
隊列的基本方法
r.offer(); 入隊尾
r.poll(); 出隊首
r.peek(); 隊首的內容
代碼實現:
全局變量設置
package two;import java.util.linkedlist;import java.util.queue;import java.util.scanner;public class bfs { static int a[][] = new int [100][100]; //輸入迷宮 static int v[][] = new int [100][100]; //走過的標記為1 static int startx,starty; //輸入起點位置 static int p,q; //輸入要到達的坐標位置 static int dx[] = {0,1,0,-1}; //方向數組 static int dy[] = {1,0,-1,0}; static queue<point> r = new linkedlist<point>(); //創建隊列 static class point{ //建立類坐標屬性 int x; int y; int step; }輸入迷宮和起始位置,目標位置
public static void main(string[] args) { scanner in = new scanner(system.in); int m = in.nextint(); int n = in .nextint(); for(int i=1;i<=m;i ) //輸入迷宮 for(int j=1;j<=n;j ) a[i][j] = in.nextint(); startx = in.nextint(); starty = in.nextint(); //輸入目標和起始位置 p = in.nextint(); q = in.nextint();bfs算法開始
1、設置隊首
//bfs point start = new point(); //定義一個初始類作為隊首 start.x = startx; start.y = starty; start.step = 0; r.offer(start); v[startx][starty]=1;2、進入循環體
while(!r.isempty()) { //當隊列為空時跳出循環 int x = r.peek().x; //把隊首的屬性賦值 int y = r.peek().y; int step = r.peek().step; if(x==p && y==q) { //到達目的地,退出循環 system.out.println(step); break; } for(int i=0;i<4;i ) { //廣度遍歷,右下左上分別入隊 int tx= x dx[i]; int ty= y dy[i]; if(a[tx][ty] == 1 && v[tx][ty]==0) { //判斷是否可以入隊 //入隊 point temp = new point(); //建立一個臨時類 temp.x = tx; temp.y = ty; temp.step = r.peek().step 1; r.offer(temp); //入隊 v[tx][ty]=1; //標記為1 } } r.poll(); //拓展完了需要隊首出隊 } }}相關推薦:java入門
百度站長平臺抓取失敗提示問題阿里云備案 要服務器嗎電腦打開嗶哩嗶哩網頁視頻顯示空白無法播放的解決方法有效提升網站關鍵詞排名6個策略使用ecs云服務器初體驗電信云服務器租用安全西部數碼站怎么著手來進行SEO優化呢云服務器建設的費用