當(dāng)前位置:
首頁 >
『ACM-算法-图论』算法竞赛进阶指南--hamilton路径(模板)
發(fā)布時(shí)間:2023/12/15
51
豆豆
生活随笔
收集整理的這篇文章主要介紹了
『ACM-算法-图论』算法竞赛进阶指南--hamilton路径(模板)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
寫在前面:我們主要還是分享算法的模板,而不是去刨析算法的原理!
什么是哈密爾頓路徑
哈密頓圖(哈密爾頓圖)(英語:Hamiltonian graph,或Traceable
graph)是一個(gè)無向圖,由天文學(xué)家哈密頓提出,由指定的起點(diǎn)前往指定的終點(diǎn),途中經(jīng)過所有其他節(jié)點(diǎn)且只經(jīng)過一次。在圖論中是指含有哈密頓回路的圖,閉合的哈密頓路徑稱作哈密頓回路(Hamiltonian
cycle),含有圖中所有頂點(diǎn)的路徑稱作哈密頓路徑(Hamiltonian path)。
天文學(xué)家哈密頓(William Rowan Hamilton) 提出,在一個(gè)有多個(gè)城市的地圖網(wǎng)絡(luò)中,尋找一條從給定的起點(diǎn)到給定的終點(diǎn)沿 途恰好經(jīng)過所有其他城市一次的路徑。
這個(gè)問題和著名的七橋問題的不同之處在于,過橋只需要確定起點(diǎn),而不用確定終點(diǎn)。哈密頓問題尋找一條從給定的起點(diǎn)到給定的終點(diǎn)沿 途恰好經(jīng)過所有其他城市一次的路徑。
實(shí)現(xiàn):
// hamilton路徑 int f[1 << 20][20]; int hamilton(int n, int weight[20][20]) {memset(f, 0x3f, sizeof(f));f[1][0] = 0;for (int i = 1; i < 1 << n; i++)for (int j = 0; j < n; j++)if (i >> j & 1)for (int k = 0; k < n; k++)if (i >> k & 1)f[i][j] = min(f[i][j], f[i ^ 1 << j][k] + weight[k][j]);return f[(1 << n) - 1][n - 1]; } 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的『ACM-算法-图论』算法竞赛进阶指南--hamilton路径(模板)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法竞赛进阶指南--快速幂,求a^b m
- 下一篇: 『ACM-算法-lowbit』算法竞赛进