java@ 利用ArrayList構建無向圖以及無向圖上的dijkstra演算法(java.util.ArrayList)

来源:http://www.cnblogs.com/fu11211129/archive/2016/01/24/5154525.html
-Advertisement-
Play Games

package dataStructure;import java.util.ArrayList;import java.util.Scanner;import java.io.*;class node { int to, dist; node(int t, int d) { ...


package dataStructure;

import java.util.ArrayList;
import java.util.Scanner;
import java.io.*;

class node {
    int to, dist;
    node(int t, int d) {
        to = t;
        dist = d;
    }
}

public class Graph {

    public static void dfs(ArrayList<ArrayList<node> > map, int v, boolean[] vis) {
        vis[v] = true;
        System.out.print(v + "  ");
        
        ArrayList<node> rhs = map.get(v);
        for(int i=0; i<rhs.size(); ++i) {
            int nv = rhs.get(i).to;
            if(!vis[nv])  dfs(map, nv, vis);
        }
    }
    
    public static void caseInit(ArrayList<ArrayList<node> > map) {
        addEdge(map, 0, 1, 6);
        addEdge(map, 1, 2, 2);
        addEdge(map, 0, 2, 3);
        addEdge(map, 1, 3, 5);
        addEdge(map, 2, 3, 3);
        addEdge(map, 2, 4, 4);
        addEdge(map, 3, 4, 2);
        addEdge(map, 3, 5, 3);
        addEdge(map, 4, 5, 5);
    }
    
    public static void customize(ArrayList<ArrayList<node> > map) {
        Scanner input = new Scanner(System.in);
        while(true) {
            int v = input.nextInt();
            if(v == -1)  break;
            
             int w = input.nextInt(), d = input.nextInt();
             addEdge(map, v, w, d);
        }
        input.close();
    }
    
    public static void addEdge(ArrayList<ArrayList<node> > map, int from, int to, int dist) {
        if(from < 0 || from >= map.size() || to < 0 || to >= map.size())  return;
        
        ArrayList<node> rhs = map.get(from);
        rhs.add(new node(to, dist));
        
        ArrayList<node> rhs2 = map.get(to);
        rhs2.add(new node(from, dist));
    }
    
    public static int[] dijkstra(ArrayList<ArrayList<node> > map, int v) {
        int[] min_dis = new int[map.size()];
        for(int i=0; i<min_dis.length; ++i) min_dis[i] = Integer.MAX_VALUE;
        for(int i=0; i<map.get(v).size(); ++i) {
            min_dis[map.get(v).get(i).to] = map.get(v).get(i).dist;
        }
            
        boolean[] vis = new boolean[map.size()];
        
        min_dis[v] = 0;
        vis[v] = true;
        ArrayList<node> rhs = map.get(v);
        
        for(int i=1; i<map.size(); ++i) {
            
            int Min = Integer.MAX_VALUE, Minj = v;
            for(int j=0; j<map.size(); ++j) {
                if(!vis[j] && min_dis[j] < Min) {
                    Min = min_dis[j];
                    Minj = j;
                }
            }
            
            vis[Minj] = true;
            ArrayList<node> tmp = map.get(Minj);
            
            for(int k=0; k<tmp.size(); ++k) {
                if(!vis[tmp.get(k).to] && min_dis[Minj] + tmp.get(k).dist < min_dis[tmp.get(k).to]) {
                    min_dis[tmp.get(k).to] = min_dis[Minj] + tmp.get(k).dist;
                }
            }
        }
        return min_dis;
    }
    
    public static void main(String[] args) {
        ArrayList<ArrayList<node> > map = new ArrayList<ArrayList<node> > ();
        
        for(int i=0; i<6; ++i) {
            ArrayList<node> row = new ArrayList<node> ();
            map.add(row);
        }
        caseInit(map);
        
        int[] min_dis = dijkstra(map, 0);
        for(int i=0; i<min_dis.length; ++i) System.out.print(min_dis[i] + "  ");
    }

}

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 第11章函數函數提供了一個有力代碼復用機制, 並且讓你的代碼保持簡潔和易懂。它們同樣也是EF運行時能利用的資料庫層代碼.函數有幾類: Rowset Functions, 聚合函數, Ranking Functions, 和標量值函數.函數要麼確定,要麼不確定。當用一些指定的值調用函數,而函數返回的結...
  • 主要介紹什麼是.NET反射特性,.NET反射能為我們做些什麼,最後介紹幾種常用的反射的實現方法,通過對反射性特的瞭解,可以設計出非常有用的基於反射的編程模式。
  • 畢業設計做了一個簡單的研究下驗證碼識別的問題,並沒有深入的研究,設計圖形圖像的東西,水很深,神經網路,機器學習,都很難。這次只是在傳統的方式下分析了一次。今年工作之後再也沒有整理過,前幾天一個家伙要這個demo看下,我把一堆東西收集,打包給他了,他閑太亂了,我就整理記錄下。這也是大學最後的一次...
  • 10-10. 為TPH繼承的插入、更新、刪除操作映射到存儲過程問題TPH繼承模型,想把它的插入、修改、刪除操作映射到存儲過程Solution假設資料庫有一個描述不同種類的產品表(Product )(見Figure 10-13). 而且為這個表的每種產品創建了創建了派生模型,這個模型如Figure 1...
  • Js面向對象 Js模型
  • 最經想改寫C用的配置讀取介面, 準備採用hash或二叉樹提到原先用的鏈表,提高查找效率. 就回顧一下二叉樹,這裡分享一下二叉查找樹,代碼很精簡的, 適合學習運用二叉樹查找.
  • 1/先在https://www.vagrantup.com 下載vagrantup ,對應平臺下載,並安裝,安裝後可以在命令行使用vagrant https://www.vagrantup.com/downloads.html 下載地址 mac:https://releases.hashic...
  • Java日期時間使用總結一、Java中的日期概述日期在Java中是一塊非常複雜的內容,對於一個日期在不同的語言國別環境中,日期的國際化,日期和時間之間的轉換,日期的加減運算,日期的展示格式都是非常複雜的問題。在Java中,操作日期主要涉及到一下幾個類:1、java.util.Date 類 Date ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...