亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Java 中處理分支計算?

如何在 Java 中處理分支計算?

慕沐林林 2023-07-28 16:49:59
我試圖根據變量有多少個連接來找到最長的可能路徑,而不需要重復連接。我想到的方法是創建一個列表,其中包含已經經過的所有點,但是當路徑結束并且我需要檢查新路徑時,所有這些舊連接都保留在列表中。如何從初始點重新開始我的列表?將其放入遞歸函數本身每次都會清除列表。有比使用列表更好的選擇嗎?相關代碼:package testapp;import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.ArrayList;import java.io.IOException;import java.util.List;class TestApp {       // Store list of objects we have already matched with    static List<NumberObject> holdingList = new ArrayList<NumberObject>();        //Test objects    static int[] array1 = {2,2};    static int[] array2 = {3,1};    static int[] array3 = {2,1};    static int[] array4 = {1,1};        static NumberObject eight = new NumberObject(array1, 8);    static NumberObject two = new NumberObject(array2, 2);    static NumberObject three = new NumberObject(array3, 3);    static NumberObject four = new NumberObject(array4, 4);    // Test objects ^^        public static int longestSequence(int[][] grid) {        // TODO: implement this function        // Code exists here not relevant to the problem        //Setting up a new numberList array for testing        NumberObject[] newNumberList = {eight, two, three, four};        NumberObject[] connections1 = {two, four};        NumberObject[] connections2 = {two, three};        //Adding connections        eight.connections = connections1;        four.connections = connections2;                for (NumberObject s: newNumberList){          recursive(s);        }        return 0;    }理想情況下,圖像顯示我想要發生的事情。相反,所有舊的分支連接仍保持在 上holdingList。應該注意的是,路徑可以分支到兩個以上的其他對象。
查看完整描述

1 回答

?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

您可以將列表副本的實例作為參數傳遞給函數,而不是將列表存儲在字段中。所以你的函數的簽名recursive將如下所示:


public static void recursive(NumberObject object, List<NumberObject> visited)

為了隱藏此實現細節,我建議編寫兩個函數,其中第二個函數僅將空列表傳遞給另一個函數。


但是,我會選擇不同的方法,因為您的新列表會獲取與樹中的條目一樣多的新列表。在以下實現中,每個“樹端”只有一個列表。此外,就像前面的建議一樣,這使您的班級保持無狀態。


static List<NumberObject> findLongestPath(NumberObject currentNode) {

        if (currentNode.getConnectedNodes().isEmpty()) {

            List<NumberObject> result = new ArrayList<>();

            result.add(currentNode);

            return result;

        }


        List<NumberObject> longestPath = currentNode.getConnectedNodes().stream()

                .map(PathFinder::findLongestPath)

                .max(Comparator.comparing(List::size))

                .get();


        longestPath.add(currentNode);

        return longestPath;

    }


查看完整回答
反對 回復 2023-07-28
  • 1 回答
  • 0 關注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號