<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      0006 ALGO1001-跳馬

      試題 算法訓練 跳馬
      image

      使用廣度優先搜索,首次抵達結束位置即為結果,或者走不到對應的點位,則輸出 -1;
      解題步驟

      1. 數據輸入
      2. 數據初始化(棋盤初始化為無窮大,表示無法跳到此處)
      3. 將開始的位置置為 0,表示 0 步就可以到達這個位置,并將初始位置壓入隊列
      4. 遍歷隊列,取出當前位置
      5. 從當前位置可以到達的位置(8 個)判斷是否降低了步數,若降低步數,則將當前位置數據壓入隊列
      6. 重復 4-5,直至隊列為空或目標點位已抵達
      7. 判斷步數,無法抵達置為 -1

      馬的位置判斷:
      image
      馬有八面威風,就是八個可以走的點位
      若馬的初始點位在 \((i, j)\),則可以走的點位:

      1. \((i-2, j-1)\)
      2. \((i-1, j-2)\)
      3. \((i+1, j-2)\)
      4. \((i+2, j-1)\)
      5. \((i+2, j+1)\)
      6. \((i+1, j+2)\)
      7. \((i-1, j+2)\)
      8. \((i-2, j+1)\)

      還要加上越界的判斷

      import java.util.Arrays;
      import java.util.Scanner;
      
      /**
       * @author HuaWang135608
       * @date 2023.03.15 10:26:13
       * @description [試題 算法訓練 跳馬](http://lx.lanqiao.cn/problem.page?gpid=T2987)
       */
      
      public class Main {
      
      	public static void main(String[] args) {
      		int[][] chessbord = new int[9][9];
      		int src_bi, src_bj, src_ei, src_ej;
      		
      		// 數據輸入
      		try (Scanner sc = new Scanner(System.in)) {
      			src_bi = sc.nextInt();
      			src_bj = sc.nextInt();
      			src_ei = sc.nextInt();
      			src_ej = sc.nextInt();
      		}
      		
      		// 數據處理
      		// 初始化棋盤,代表跳到當前位置的步數是無窮大
      		for (int[] row : chessbord) {
      			Arrays.fill(row, Integer.MAX_VALUE);
      		}
      		// 以隊列的形式壓入下一步可以跳到的位置
      		int front = 0, rear = 0;
      		int[][] queue = new int[64][3];
      		queue[rear][0] = src_bi;
      		queue[rear][1] = src_bj;
      		chessbord[src_bi][src_bj] = queue[rear++][2] = 0;
      		// 隊列為空或已抵達對應位置則退出循環(廣度優先,首次抵達就是最優解)
      		while (front!=rear && chessbord[src_ei][src_ej]==Integer.MAX_VALUE) {
      			int i = queue[front][0];
      			int j = queue[front][1];
      			int v = queue[front++][2] + 1;
      			if (front == queue.length) {
      				front = 0;
      			}
      			
      			// 若可以到達此處且步數少于已有的步數,則將當前位置壓入隊列,并更新步數
      			if (i>2 && j>1 && chessbord[i-2][j-1]>v) {
      				queue[rear][0] = i - 2;
      				queue[rear][1] = j - 1;
      				queue[rear++][2] = v;
      				if (rear == queue.length) {
      					rear = 0;
      				}
      				chessbord[i - 2][j - 1] = v;
      			}
      			if (i>1 && j>2 && chessbord[i-1][j-2]>v) {
      				queue[rear][0] = i - 1;
      				queue[rear][1] = j - 2;
      				queue[rear++][2] = v;
      				if (rear == queue.length) {
      					rear = 0;
      				}
      				chessbord[i - 1][j - 2] = v;
      			}
      			if (i<8 && j>2 && chessbord[i+1][j-2]>v) {
      				queue[rear][0] = i + 1;
      				queue[rear][1] = j - 2;
      				queue[rear++][2] = v;
      				if (rear == queue.length) {
      					rear = 0;
      				}
      				chessbord[i + 1][j - 2] = v;
      			}
      			if (i<7 && j>1 && chessbord[i+2][j-1]>v) {
      				queue[rear][0] = i + 2;
      				queue[rear][1] = j - 1;
      				queue[rear++][2] = v;
      				if (rear == queue.length) {
      					rear = 0;
      				}
      				chessbord[i + 2][j - 1] = v;
      			}
      			if (i<7 && j<8 && chessbord[i+2][j+1]>v) {
      				queue[rear][0] = i + 2;
      				queue[rear][1] = j + 1;
      				queue[rear++][2] = v;
      				if (rear == queue.length) {
      					rear = 0;
      				}
      				chessbord[i + 2][j + 1] = v;
      			}
      			if (i<8 && j<7 && chessbord[i+1][j+2]>v) {
      				queue[rear][0] = i + 1;
      				queue[rear][1] = j + 2;
      				queue[rear++][2] = v;
      				if (rear == queue.length) {
      					rear = 0;
      				}
      				chessbord[i + 1][j + 2] = v;
      			}
      			if (i>1 && j<7 && chessbord[i-1][j+2]>v) {
      				queue[rear][0] = i - 1;
      				queue[rear][1] = j + 2;
      				queue[rear++][2] = v;
      				if (rear == queue.length) {
      					rear = 0;
      				}
      				chessbord[i - 1][j + 2] = v;
      			}
      			if (i>2 && j<8 && chessbord[i-2][j+1]>v) {
      				queue[rear][0] = i - 2;
      				queue[rear][1] = j + 1;
      				queue[rear++][2] = v;
      				if (rear == queue.length) {
      					rear = 0;
      				}
      				chessbord[i - 2][j + 1] = v;
      			}
      		}
      		int res = chessbord[src_ei][src_ej];
      		// 判斷是否能跳到
      		if (res == Integer.MAX_VALUE) {
      			res = -1;
      		}
      		
      		System.out.println(res);
      	}
      	
      }
      
      posted @ 2023-03-15 11:28  華王135608  閱讀(46)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 夜鲁鲁鲁夜夜综合视频| jlzz大jlzz大全免费| 一本一本久久A久久精品综合不卡| 日韩一区在线中文字幕| 天堂www在线中文| 91精品91久久久久久| 久国产精品韩国三级视频| 午夜国产精品福利一二| 亚洲成在人线在线播放无码| 国产成人精品一区二区秒拍1o| 国产精品香蕉在线观看不卡| 亚洲欧美偷国产日韩| 国产亚洲情侣一区二区无| 少妇被爽到高潮喷水久久欧美精品| 精品国产乱码久久久久APP下载| 成人午夜在线播放| 国内精品亚洲成av人片| 亚洲高清WWW色好看美女| 性欧美VIDEOFREE高清大喷水| 亚洲国产成人午夜在线一区| 推油少妇久久99久久99久久| 久久精品国产免费观看频道| 亚洲香蕉伊综合在人在线| 亚洲av成人三区国产精品| 国产成人欧美日韩在线电影| 免费现黄频在线观看国产| 久久精品国产亚洲av麻豆长发| 盘山县| 国产av无码国产av毛片| 人妻少妇久久中文字幕| 久久妇女高潮喷水多| 韩国无码AV片午夜福利 | 国产中文字幕精品在线| 久久亚洲私人国产精品| 亚洲av乱码一区二区| 一区二区视频| 国产精品日韩av在线播放| 久久99九九精品久久久久蜜桃| 中文字幕亚洲精品乱码| 99精品全国免费观看视频| av亚洲在线一区二区|