迪傑斯特拉(Dijkstra)演算法求圖的單源最短路徑
template<class Type>
void Dijkstra(int n, int v, Type dist[], int prev[], Type **c) {
//單源最短路徑問題的 Dijkstra 演算法
bool s[maxint];
for (int i = 1; i <= n; i++) {
dist[i] = c[v][i];
s[i] = false;
if (dist[i] == maxint) prev[i] = 0;
else prev[i] = v;
}
dist[v] = 0; s[v] = true;
for (int i = 1; i < n; i++) {
int temp = maxint;
int u = v;
for (int j = 1; j <= n; j++)
if (!s[j] && dist[j] < temp) {
u = j;
temp = dist[j];
}
s[u] = true;
for (int j = 1; j <= n; j++)
if (!s[j] && c[i][j] < maxint) {
Type newdist = dist[u] + c[u][j];
if (newdist < dist[j]) {
dist[j] = newint;
prev[j] = u;
}
}
}
}
如果還沒解決你的問題,可以加我網路HI賬號。
2. 枚舉演算法,VB表達式
PrivateSubCommand1_Click()
DimcAsInteger,nAsInteger,jAsInteger
c=0
j=0
DoWhilej<100
n=25006+j*10
IfnMod37=0OrnMod67=0Then
c=c+1
List1.AddItem"第"&Str(c)&"數字是"&Str(n)
Else
EndIf
j=j+1
Loop
List1.AddItemStr(c)
EndSub
雖然帖子很久了但是,還是補充個完整的
3. 這是解析演算法還是枚舉演算法
是解析演算法吧:
解析法(analysis algorithm):用解析的方法,即找出表示問題的前提條件與結果之間關系的數學表達式,並通過表達式的計算來實現問題求解的方法。
枚舉的定義:根據所需解決問題的條件,把該問題所有可能的解,一一列舉出來,並逐個檢驗出問題真正解的方法。枚舉法也稱為窮舉法。
4. 硬幣問題採用枚舉思想,該枚舉演算法的思路大概描述一下
這個還是可以考慮的,因為為什麼呀,因為這個描述下還是大概意思就行,然後自己好好想想那個。
5. 關於演算法的基礎知識 解析演算法和枚舉演算法有什麼區別
所謂解析法(analysis algorithm)是指用解析的方法找出表示問題的前提條件與結果之間關系的數學表達式,並通過表達式的計算來實現問題求解.
在實際問題中,有些變數的取值被限定在一個有限的范圍內.例如,一個星期內只有七天,一年只有十二個月,一個班每周有六門課程等等.如果把這些量說明為整型,字元型或其它類型顯然是不妥當的.為此,C語言提供了一種稱為「枚舉」的類型.在「枚舉」類型的定義中列舉出所有可能的取值,被說明為該「枚舉」類型的變數取值不能超過定義的范圍.應該說明的是,枚舉類型是一種基本數據類型,而不是一種構造類型,因為它不能再分解為任何基本類型.
6. 枚舉演算法的介紹
在實際問題中, 有些變數的取值被限定在一個有限的范圍內。例如,一個星期內只有七天,一年只有十二個月, 一個班每周有六門課程等等。如果把這些量說明為整型, 字元型或其它類型顯然是不妥當的。 為此,C語言提供了一種稱為「枚舉」的類型。在「枚舉」類型的定義中列舉出所有可能的取值, 被說明為該「枚舉」類型的變數取值不能超過定義的范圍。應該說明的是, 枚舉類型是一種基本數據類型,而不是一種構造類型, 因為它不能再分解為任何基本類型。
7. 搜索演算法和枚舉演算法的區別是什麼
枚舉是在范圍內查找所有可能解,不是找到就結束;
順序查找是假設在數組范圍內找key,找到就結束,不一定到數據結束。也就是,如果數組中的第一個數據就是我們要找的key,那麼找到了,不再繼續找第2個。
8. 枚舉演算法的使用
枚舉類型在使用中有以下規定:
枚舉值是常量,不是變數。不能在程序中用賦值語句再對它賦值。例如對枚舉weekday的元素再作以下賦值: sun=5;mon=2;sun=mon; 都是錯誤的。
枚舉元素本身由系統定義了一個表示序號的數值,從0 開始順序定義為0,1,2…。如在weekday中,sun值為0,mon值為1, …,sat值為6。
例如:
#include<stdio.h>
int main()
{
enum weekday{sun,mon,tue,wed,thu,fri,sat };
weekday a,b,c; //將a,b,c定義為枚舉變數
a=sun;
b=mon;
c=tue;
printf(%d,%d,%d,a,b,c);
return 0;
}
運行結果為:0,1,2
枚舉值也可以用來做判斷比較。如:if(mon>sun) …
枚舉變數的值可以由程序員自己定。如:
enum weekday{sun=7,mon=1,tue,wed,thu,fri,sat};
定義sun為7,mon為1,以後按順序加1,即wed=3。
9. 枚舉演算法的說明
如同結構和聯合一樣,枚舉變數也可用不同的方式說明, 即先定義後說明,同時定義說明或直接說明。設有變數a,b,c被說明為上述的weekday,可採用下述任一種方式:
enum weekday
{
......
};
enum weekday a,b,c;或者為: enum weekday
{
......
}a,b,c;或者為: enum
{
......
}a,b,c;
10. 什麼是枚舉法
枚舉法是利用計算機運算速度快、精確度高的特點,對要解決問題的所有可能情況,一個不漏地進行檢驗,從中找出符合要求的答案,因此枚舉法是通過犧牲時間來換取答案的全面性。在數學和計算機科學理論中,一個集的枚舉是列出某些有窮序列集的所有成員的程序,或者是一種特定類型對象的計數。這兩種類型經常(但不總是)重疊。
基本信息
中文名:枚舉法
外文名:Enumeration method
定義:逐個考察了某類事件的所有可能
藉助:計算機運算速度快精確度高特點
結構:while循環
演算法:二進制加法,此時需要數組來幫忙
簡介
枚舉法是利用計算機運算速度快、精確度高的特點,對要解決問題的所有可能情況,一個不漏地進行檢驗,從中找出符合要求的答案,因此枚舉法是通過犧牲時間來換取答案的全面性。
在 數學和 計算機科學理論中,一個集的 枚舉是列出某些有窮序列集的所有成員的 程序,或者是一種特定類型對象的 計數。這兩種類型經常(但不總是)重疊。
特點
將問題的所有可能的答案一一 列舉,然後根據條件判斷此答案是否合適,合適就保留,不合適就丟棄。例如:找出1到100之間的素數,需要將1到100之間的所有 整數進行判斷。
枚舉演算法因為要列舉問題的所有可能的答案,所有它具備以下幾個特點:
1、得到的結果肯定是正確的;
2、可能做了很多的無用功,浪費了寶貴的時間,效率低下。
3、通常會涉及到求 極值(如最大,最小,最重等)。
4、數據量大的話,可能會造成時間崩潰。
結構
枚舉演算法的一般結構:while 循環。
首先考慮一個問題:將1到100之間的所有整數轉換為 二進制數表示。
演算法一
for i:=1 to 100 do begin
將i轉換為 二進制,採用不斷除以2, 余數即為轉換為2進制以後的結果。一直除商為0為止。
end;
演算法二
二進制加法,此時需要數組來幫忙。
program p;
var a:array[1..100] of integer; {用於保存轉換後的二進制結果}
i,j,k:integer;
begin
fillchar(a,sizeof(a),0); {100個數組元素全部初始化為0}
for i:=1 to 100 do begin
k:=100;
while a[k]=1 do dec(k); {找高位第一個為0的位置}
a[k]:=1; {找到了立刻賦值為1}
for j:=k+1 to 100 do a[j]:=0; {它後面的低位全部賦值為0}
k:=1;
while a[k]=0 do inc(k); {從最高位開始找不為0的位置}
write('(',i,')2=');
for j:=k to 100 do write(a[j]); {輸出轉換以後的結果}
writeln;
end;
end.
枚舉法,常常稱之為 窮舉法,是指從可能的集合中一一枚舉各個元素,用題目給定的約束條件判定哪些是無用的,哪些是有用的。能使命題成立者,即為問題的解。