演算法分析與設計實驗十二

2021-10-07 05:21:37 字數 1232 閱讀 1708

問題

給定無向連通圖g和m種顏色,用這些顏色給圖的頂點著色,每個頂點一種顏色。如果要求g的每條邊的兩個頂點著不同顏色。給出所有可能的著色方案;如果不存在,則回答「no」。

解析

四色猜想:四色問題是m圖著色問題的乙個特例,根據四色原理,證明平面或球面上的任何地圖的所有區域都至多可用四種、顏色來著色,並使任何兩個有一段公共邊界的相鄰區域沒有相同的顏色。這個問題可轉換成對一平面圖的4-著色判定問題(平面圖是乙個能畫於平面上而邊無任何交叉的圖)。將地圖的每個區域變成乙個結點,若兩個區域相鄰,則相應的結點用一條邊連線起來。多年來,雖然已證明用5種顏色足以對任一幅地圖著色,但是一直找不到一定要求多於4種顏色的地圖。直到2023年這個問題才由愛普爾,黑肯和考西利用電子計算機的幫助得以解決。他們證明了4種顏色足以對任何地圖著色。

考慮所有的圖,討論在至多使用m種顏色的情況下,可對一給定的圖著色的所有不同方法。通過回溯的方法,不斷的為每乙個節點著色,在前面n-1個節點都合法的著色之後,開始對第n個節點進行著色,這時候列舉可用的m個顏色,通過和第n個節點相鄰的節點的顏色,來判斷這個顏色是否合法,如果找到那麼一種顏色使得第n個節點能夠著色,那麼說明m種顏色的方案是可行的。

設計

#include

#include

#include

#include

#include

#include

using namespace std;

typedef

long

long ll;

int n, m, match, ans =

0, a, b;

int mp[

1010][

1010

], se[

1010];

bool check

(int t)

return1;

}void

back

(int t)

else}}

intmain()

back(1

);if(ans >0)

printf

("%d"

, ans)

;else

printf

("no");

}

分析

時間複雜度為:

o(n*m^n)

演算法設計與分析 實驗1

一 實驗目的和要求 理解分治法的演算法思想,閱讀實現書上已有的部分程式 並完善程式,加深對分治法的演算法原理及實現過程的理解。二 實驗環境 實驗裝置 code blocks13.12 三 實驗原理及內容 一 用分治法實現一組無序序列的兩路合併排序和快速排序。要求清楚合併排序及快速排 序的基本原理,程...

演算法設計與分析 實驗3

一 實驗目的和要求 學習程式設計實現深度優先搜尋狀態空間樹求解實際問題的方法,著重體會求解第乙個可行解和求解所有可行解之間的差別。加深理解回溯法通過搜尋狀態空間樹 同時用約束函式剪去不含答案狀態子樹的演算法思想,會用蒙特卡羅方法估計演算法實際生成的狀態空間樹的結點數。二 實驗環境 實驗裝置 vsia...

演算法分析與設計實驗三 檢索演算法設計

在乙個排好序的陣列t 1 n 中查詢x,如果x在t中,輸出x在t的下標j 如果x不在t中,輸出j 01.順序查詢 從第乙個元素x開始逐個與需要查詢的元素key進行比較,當x key時返回x的下標,如果比較到最後都沒有找到,則返回j 0 2.二分查詢 不斷地將有序陣列進行對半分割,並檢查每個分割槽的中...