旅行商問題:乙個商人從城市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 ...