欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java?九宮重排(滿分解法)

 更新時間:2022年05月24日 08:27:12   作者:愛敲代碼的三毛  
本文主要介紹了Java?九宮重排(滿分解法),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

題目

如下圖的九宮格中,放著 1 ~ 8 的數字卡片,還有一個格子空著。與空格子相鄰的格子中的卡片可以移動到空格中。 經過若干次移動,可以形成圖 2 所示的局面。

在這里插入圖片描述

我們把上圖的局面記為:12345678.

把下圖的局面記為:123.46758

在這里插入圖片描述

顯然是按從上到下,從左到右的順序記錄數字,空格記為句點。

題目的任務是已知九宮的初態(tài)和終態(tài),求最少經過多少步的移動可以到達。如果無論多少步都無法到達,則輸出 -1。

輸入描述

輸入第一行包含九宮的初態(tài),第二行包含九宮的終態(tài)。

輸出描述

輸出最少的步數,如果不存在方案,則輸出 -1。

輸入

12345678.
123.46758

輸出

3

思路

求最少步數,典型的廣搜

  • 題目讓我們求最少步數,我們可以模擬空格的移動
  • 通過字符串的下標交換字符位置,模擬字符串的上下左右的移動,每次移動通過set判斷該狀態(tài)是否已經移動過,如果沒有就入隊列
  • 上(-3)下(+3)左(-1)右(+1)
  • 判斷每次的下標是否合法,越界只要判斷示是否在字符串長度范圍內

關鍵代碼:

(pos%3 != index%3 && pos/3 != index/3)

因為當前位置和上下都只是差3,左右都只是差1
如果是左右就一定滿足,下標/3相等
如果是上下就一定滿足,下標%3相等

在這里插入圖片描述

代碼

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String start = sc.next();
        String end = sc.next();

		// 枚舉字符串下標的上下左右
        int[] upDownLeftRight = {-3,3,-1,1};
        // 去重
        Set<String> set = new HashSet<>();
        Queue<String> queue = new LinkedList<>();
        set.add(start);
        queue.offer(start);

        int count = 0;
        // 標記是否已經找到
        boolean flag = false;
        while (!queue.isEmpty()) {
            int size = queue.size();
            while (size-- != 0) {
                String s =  queue.peek();
                // 空格位置
                int index = s.indexOf(".");
                for (int i = 0; i < 4; i++) {
                    int pos = index + upDownLeftRight[i];
                    // 當新的位置不是空格的上下左右或者已經越界
                    if (pos < 0 || pos > 8 || (pos%3 != index%3 && pos/3 != index/3)) {
                        continue;
                    }

                    char c = s.charAt(pos);
                    char[] ch = s.toCharArray();
                    ch[pos] = ch[index];
                    ch[index] = c;

                    String str = new String(ch);
                    if (str.equals(end)) {
                        flag = true;
                        break;
                    }
                    if (set.add(str)) {
                        queue.offer(str);
                    }

                }
                queue.poll();
            }
            count++;
            if (flag) {
                break;
            }
        }
        if (flag) {
            System.out.println(count);
        } else {
            System.out.println(-1);
        }
    }
}

在這里插入圖片描述

 到此這篇關于Java 九宮重排(滿分解法)的文章就介紹到這了,更多相關Java 九宮重排內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java:DocumentBuilderFactory調用XML的方法實例

    Java:DocumentBuilderFactory調用XML的方法實例

    Java:DocumentBuilderFactory調用XML的方法實例,需要的朋友可以參考一下
    2013-04-04
  • dom4j從jar包中讀取xml文件的方法

    dom4j從jar包中讀取xml文件的方法

    這篇文章主要介紹了dom4j從jar包中讀取xml文件的方法,需要的朋友可以參考下
    2014-02-02
  • mybatis-plus自定義排序的實現

    mybatis-plus自定義排序的實現

    本文主要介紹了mybatis-plus自定義排序的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • Springmvc如何實現向前臺傳遞數據

    Springmvc如何實現向前臺傳遞數據

    這篇文章主要介紹了Springmvc如何實現向前臺傳遞數據,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • SpringBoot屬性綁定與bean屬性校驗實現方法詳解

    SpringBoot屬性綁定與bean屬性校驗實現方法詳解

    這篇文章主要介紹了SpringBoot屬性綁定與bean屬性校驗實現方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-11-11
  • Java設計模式之java訪問者模式詳解

    Java設計模式之java訪問者模式詳解

    這篇文章主要介紹了JAVA設計模式之訪問者模式,簡單說明了訪問者模式的原理,并結合實例分析了java訪問者模式的定義與用法,需要的朋友可以參考下
    2021-09-09
  • 詳解Java中==和equals()的區(qū)別

    詳解Java中==和equals()的區(qū)別

    這篇文章主要介紹了Java中==和equals()的區(qū)別,,==可以使用在基本數據類型變量和引用數據類型變量中,equals()是方法,只能用于引用數據類型,需要的朋友可以參考下
    2021-11-11
  • Java實現兩人五子棋游戲(五) 判斷是否有一方勝出

    Java實現兩人五子棋游戲(五) 判斷是否有一方勝出

    這篇文章主要為大家詳細介紹了Java實現兩人五子棋游戲,判斷是否有一方勝出,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • springboot日志文件名稱叫l(wèi)ogback-spring.xml的原因解析

    springboot日志文件名稱叫l(wèi)ogback-spring.xml的原因解析

    這篇文章主要介紹了springboot日志文件名稱為什么叫l(wèi)ogback-spring.xml,本文給大家講解的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • Springboot基于websocket實現簡單在線聊天功能

    Springboot基于websocket實現簡單在線聊天功能

    這篇文章主要介紹了Springboot基于websocket實現簡單在線聊天功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06

最新評論