旅行商問題

2021-08-20 02:46:50 字數 1128 閱讀 9794

旅行商問題:乙個商人從城市a出發,訪問bcde等城市各一次最後回到a,問行程如何使得路程或費用最低。

這是個np(非多項式可解,但一般驗證容易)問題,假設中間有4個城市,那麼全排列為4!=24種,沒有很好的演算法,基本只能窮舉了。

class vertex_4

}public class lianxi

public void addver(char label)

// 無向

public void addedge(int s, int e, int d)

public void findroad()

// 列出所有排列,然後計算距離和

private void find(string s, string result)

sum += adjmat[(int) array[0] - 65][(int) array[array.length - 1] - 65];

result += vertex[(int) array[0] - 65].label;

if (sum < inf)

system.out.println(result + " : " + sum);

// else system.out.println(result+" : inf");

} else }}

public static void main(string args)

也就是說這是個遞迴的問題,感覺遞迴比較抽象,理解起來稍費勁。附上乙個對字串陣列部分序列全排的程式,比上面的要好。

public class lianxi2

public static void arrange(string str, int i, int j)

// 字串陣列的部分序列全排

// 最後乙個引數只是儲存起始點的作用,第二個引數與第四個需保持一致

private static void arrange(string str, int st, int len, int temp) else }}

public static void main(string args) ;

arrange(str, 0, 4);

system.out.println("total: " + total);}}

旅行商問題

一銷售商從n個城市中的某一城市出發,不重複地走完其餘n 1個城市並回到原出發點,在所有可能的路徑中求出路徑長度最短的一條。本題假定該旅行商從第1個城市出發。對每個測試例,第1行有兩個整數 n 4 n 10 和m 4 m 20 n是結點數,m是邊數。接下來m行,描述邊的關係,每行3個整數 i,j le...

旅行商問題

題意 旅行商問題,即從 1 走到 n 不重不漏,然後求最小距離。題解 狀態壓縮dp,顯然的是,要從某種狀態到某種狀態並且合法,然後取 min 然後全部遍歷。所以設 dp 的含義是,最後乙個點是 i 點,然後走過了 j 這個 01 串的有 1 的點。然後要想的是順序問題,那麼我們必然是從上乙個點推到 ...

旅行商問題(貪婪法)

h greedytsp.h created on 2011 7 12 author 哈哈 ifndef greedytsp h define greedytsp h include using namespace std include include void printstate vector ...