日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

七桥问题和欧拉道路

發(fā)布時(shí)間:2023/12/18 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 七桥问题和欧拉道路 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

      • 問題的引出
      • 基本定義和規(guī)律
      • 實(shí)戰(zhàn)演練:

問題的引出

  • ?柯尼斯堡七橋問題( Seven Bridges of Konigsberg )是圖論中的著名問題。這個(gè)問題是基于一個(gè)現(xiàn)實(shí)生活中的事例:當(dāng)時(shí)東普魯士柯尼斯堡(今日俄羅斯加里寧格勒)市區(qū)跨普列戈利亞河兩岸,河中心有兩個(gè)小島。小島與河的兩岸有七條橋連接。在所有橋都只能走一遍的前提下,如何才能把這個(gè)地方所有的橋都走遍?
  • ?能否從無向圖中的一個(gè)結(jié)點(diǎn)出發(fā)走出一條道路,每條邊恰好經(jīng)過一次,這樣的路線稱為歐拉道路(一筆畫 )。

基本定義和規(guī)律

  • ?如果一個(gè)無向圖是連通的,且最多只有兩個(gè)奇點(diǎn)(度數(shù)為奇數(shù)),則一定存在歐拉道路
  • ?如果有兩個(gè)奇點(diǎn),它們必須是起點(diǎn)和終點(diǎn)
  • ?如果奇點(diǎn)不存在,可以從任意點(diǎn)出發(fā),最終一定會(huì)回到該點(diǎn) ,稱為歐拉回路
  • ?對(duì)于有向圖,歐拉道路存在的充要條件是:最多只能有兩個(gè)點(diǎn)的入度不等于出度,而且必須是其中一一個(gè)點(diǎn)的出度恰好比入度大1 (起點(diǎn)) ,另一個(gè)的入度比出度大1 (終點(diǎn))

實(shí)戰(zhàn)演練:

打印出下圖的歐拉道路的走法

解題思路:
??用鄰接矩陣表示圖,由于要形成歐拉道路,所以應(yīng)該從度數(shù)為奇數(shù)的節(jié)點(diǎn)出發(fā);開始進(jìn)行深搜,在深搜的過程中做標(biāo)記哪些邊走過;可以另用一個(gè)相同的鄰接矩陣做標(biāo)記,也可以對(duì)原來的鄰接矩陣進(jìn)行修改。

代碼如下:

import java.util.ArrayList; import java.util.List; import java.util.Stack;public class 歐拉道路 {//圖的鄰接矩陣private static int[][] graph = {{0,1,2,1},{1,0,0,0},{2,0,0,1},{1,0,1,0},};private static int n = 4; //節(jié)點(diǎn)數(shù)private static List<String> l = new ArrayList<String>();//因?yàn)樯钏褧r(shí)是先存儲(chǔ)后面的路徑,所以用棧進(jìn)行存儲(chǔ)private static Stack<String> path = new Stack<String>();public static void main(String[] args) {//從節(jié)點(diǎn)數(shù)為奇數(shù)的開始進(jìn)行深搜,C的度數(shù)為3,所以從C節(jié)點(diǎn)開始深搜dfs(2);while(!path.isEmpty()){System.out.println(path.pop());}}private static void dfs(int i) {//尋找相鄰的節(jié)點(diǎn),且邊沒有使用過for(int j=0; j<n; j++){if(graph[i][j]>0){ //右邊且沒有使用過//減去使用過的邊graph[i][j]--;graph[j][i]--;dfs(j);//添加走過的路徑必須放到深搜后,當(dāng)深搜到終點(diǎn)時(shí),反向的保存路徑。//如果在深搜前添加路徑,可能會(huì)將錯(cuò)誤的路徑給添加進(jìn)去,//因?yàn)楫?dāng)走到一個(gè)只有一條邊的節(jié)點(diǎn)時(shí),會(huì)回溯path.push((char)('A'+i) +"->" + (char)('A'+j));}}} }

總結(jié)

以上是生活随笔為你收集整理的七桥问题和欧拉道路的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。