乙個無向連通圖g點上的哈密爾頓(hamiltion)迴路是指從圖g上的某個頂點出發,經過圖上所有其他頂點一次且僅一次,最後回到該頂點的路勁。一種求解無向圖上哈密爾頓迴路演算法的基礎實現如下:
假設圖g存在乙個從頂點v0出發的哈密爾頓迴路v1——v2——v3——...——vn-1——v0。演算法從頂點v0出發,訪問該頂點的乙個未被訪問的鄰接頂點v1,接著從頂點v1出發,訪問v1乙個未被訪問的鄰接頂點v2,..。;對頂點vi,重複進行以下操作:訪問vi的乙個未被訪問的鄰接接點vi+1;若vi的所有鄰接頂點均已被訪問,則返回到頂點vi-1,考慮vi-1的下乙個未被訪問的鄰接頂點,仍記為vi;知道找到一條哈密爾頓迴路或者找不到哈密爾頓迴路,演算法結束。
【c**】
下面是演算法的c語言實現。
(1)常量和變數說明
n :圖g中的頂點數
c:圖g的鄰接矩陣
k:統計變數,當期已經訪問的定點數為k+1
x[k]:第k個訪問的頂點編號,從0開始
visited[x[k]]:第k個頂點的訪問標誌,0表示未訪問,1表示已訪問
(2)c程式
1 #include 2 #include 3【問題1】(10分)根據題幹說明。填充c**中的空(1)~(5).#define max 100
45 void hamilton(int n,int x[max,int
c[max][max]){6in
t ;7
int visited[max];
8intk;9
/*初始化x陣列和visited陣列
*/10
for(i=0:i{
11 x[i]=0
;12 visited[i]=0;13
}14/*訪問起始頂點
*/15 k=0;
16(visited[0]=1);
17 x[0]=0;
18 k=k+1;
19/*
訪問其他頂點
*/20
while(k>=0
){21 x[k]=x[k]+1;22
while(x[k]>
23if(visited[x[k]]==0) &&c[x-[k-1]][x[k]=1){/*
鄰接頂點x[k]未被訪問過
*/24
break
;25 }else
{26 x[k] = x[k] + 1;27}
28}29if(x[k]1&&visited[x[k]]==1){ /*
找到一條哈密爾頓迴路
*/30
for(k=0;k{
31 prinf(〝%d--〝,x[k] ; /*
輸出哈密爾頓迴路
*/32
}33 prinf(〝%d--〝,x[0
] ;34
return
;35 }else
if x[k]1){/*
設定當期頂點的訪問標誌,繼續下乙個頂點
*/36
visited[x[k]]=1;
37 k=k+1
;38 }else{/*
沒有未被訪問過的鄰接頂點,回退到上乙個頂點
*/39 x[k]=0
;40 visited x[k]=0;41
k=k-1;42
}43
}44 }
答案:**中標註紅色的即為答案!
【問題2】(5分)
根據題幹說明和c**,演算法採用的設計策略為(6),該方法在遍歷圖的頂點時,採用的是(7)方法(深度優先或廣度優先)。
答案:6:回溯法
7:深度優先
物件導向程式設計五大原則:
1單一職責原則:對乙個類來說,應該僅有乙個引起它變化的原因。
2開放封閉原則:軟體組成實體應該是可擴充套件的,但是不可修改的。
3替換原則:子類應當可以替換父類並出現在父類能出現的任何地方。
4依賴原則:在進行業務設計時,與特定業務有關的依賴關係應該盡量依賴介面和抽象類,而不是具體類。
5介面分離原則:採用多個與特定客戶類有關的介面比採用乙個通用的涵蓋多個業務方法的介面要好。
複習 軟體設計師之論 物件導向思想
物件導向 類 繼承 物件 訊息通訊 物件 是系統中用來描述客觀事物的乙個實體,他是構成系統的乙個基本單位 物件有三要素 物件標誌,屬性和服務 封裝 是物件的乙個重要原則。它有兩層含義 第一 物件是其全部屬性和全部服務緊密結合而形成的乙個不可分割的整體 第二 物件是乙個不透明的黑盒子,表示物件狀態的資...
複習 軟體設計師之論 物件導向思想
物件導向 類 繼承 物件 訊息通訊 物件 是系統中用來描述客觀事物的乙個實體,他是構成系統的乙個基本單位 物件有三要素 物件標誌,屬性和服務 封裝 是物件的乙個重要原則。它有兩層含義 第一 物件是其全部屬性和全部服務緊密結合而形成的乙個不可分割的整體 第二 物件是乙個不透明的黑盒子,表示物件狀態的資...
軟體設計師教程目錄
第1章 計算機系統知識 1.1計算機系統基礎知識1 1.2計算機體系結構1 1.3安全性 可靠性與系統效能評測基礎知識34 第2章 程式語言基礎知識51 2.1程式語言概述5 1 2.2語言處理程式基礎6l 第3章 作業系統知識94 3.1作業系統基礎知識94 3.2處理機管理98 3.3儲存管理 ...