Hdu 1385(最短路 字典序)

2021-09-24 07:08:38 字數 1898 閱讀 8522

hdu 1385

(1)題意:

n個城市,每個城市之間有可能有一條路,走過這條路的花費為x,經過每個城市的花費為val,

給出n*n的城市地圖,q個查詢,每次查詢x y城市之間的最短距離。

如果有多條最短路,輸出字典序最小的那條。

(2)spfa思路:

path陣列記錄路徑,如果存在多條最短路,就用字串記錄一下最短路,比較一下誰的字典序更大。

用dfs遞迴查詢最短路。

(3)**:

#include#include#include#include#include#include#includeusing namespace std;

const int maxn = 2005;

const int inf = 1e9+10;

int vis[maxn],dis[maxn],mp[maxn][maxn],n,val[maxn],pos,path[maxn];

char s1[maxn],s2[maxn];

void dfs(int x,char *ss)

bool cmp(int p1,int p2)

void print(int x)

void spfa(int st,int ed)

dis[st] = 0;

queue q;

q.push(st);

while(!q.empty())

}else if(dis[i]==dis[x]+mp[x][i]+val[i]&&cmp(i,x))

}} }

printf("from %d to %d :\n",st,ed);

printf("path: ");

print(ed);

printf("\n");

printf("total cost : %d\n\n",dis[ed]);

}int main(void)

} for(int i=1;i<=n;i++) scanf("%d",&val[i]);

int x,y;

while(~scanf("%d%d",&x,&y))

int tp1 = val[x],tp2 = val[y];

val[x] = val[y] = 0;

spfa(x,y);

val[x] = tp1;val[y] = tp2;

} }return 0;

}

(4)ford思路:

用path[i][j]陣列記錄路徑i到j路徑上的經過的第乙個節點,然後不斷更新這個節點,得到最終的路徑。

(感覺這題就是為ford出的)。

(5)**:

#include#include#include#includeusing namespace std;

const int maxn = 2005;

const int inf = 1e9+10;

int mp[maxn][maxn],path[maxn][maxn],n,val[maxn];

void ford()

else if(mp[i][j]==tp&&path[i][j]>path[i][k])

}} }

}int main(void)

for(int i=1;i<=n;i++) scanf("%d",&val[i]);

ford();

int x,y;

while(~scanf("%d%d",&x,&y))

printf("%d\n",y);

printf("total cost : %d\n\n",mp[x][y]);

//val[x] = t1;val[y] = t2;

} }return 0;

}

參考文章

字典序最小的最短路

給出n和m,有n個點,m條雙向邊,1為起點,n為終點,每條邊都有乙個權值,經過每一條邊的時間都為1,求從起點到終點既要時間最少,又要權值組成的序列的字典序最小的一條路徑.4 6 1 2 1 1 3 2 3 4 3 2 3 1 2 4 4 3 1 1 2 1 3 50 n 100 100 n 1000...

最短路 逆向思維 字典序最小

題意 無向圖,每個點由大小寫組成,大寫字母代表城鎮,經過需要繳納 ce il s um 20 ceil sum 20 ceil sum 20費用,小寫字母代表村莊,經過需要繳納1 11費用。已經到達目的地點t tt,需要運送到的貨物,求從起點s ss需要帶的貨物的最小值,並輸出字典序最小的路線 起點...

HDU 2544 最短路 最短路

最近複習了最短路徑的演算法,就寫了4個版本的測試。正好是模板題,就果斷a之。dijkstar版本 include include include include include include includeusing namespace std define n 110 define max 99...