hdu 2544 最短路 (邻接表)
2010-06-29 16:56
309 查看
]/* ¿´À´ÁÚ½Ó±íµÄЧÂʾÍÊDz»Ò»ÑùµÄ¡£¡£ */ #include <iostream> #include <cstdio> #include <queue> #include <cstring> using namespace std; const int N = 105; const int INF = 0x7f7f7f7f; int dis ; bool hash ; struct node { int x; int dis; struct node *next; }; node *map , vex ; void Init() { for(int i = 0; i < N; i++) { map[i] = &vex[i]; map[i]->next = NULL; } } void creat(int x, int y, int dis) { node *p; p = new node; p->x = y; p->dis = dis; p->next = NULL; map[x]->next = p; map[x] = p; } struct Node { int x; int dis; friend bool operator < (Node a, Node b) { return a.dis > b.dis; } }; void BFS(int st, int n) { priority_queue<Node> Q; Node P, M; memset(hash, false, sizeof(hash)); memset(dis, 0x7f, sizeof(dis)); map[st] = &vex[st]; node *p; p = map[st]->next; for(; p != NULL; p = p->next) { M.dis = p->dis; M.x = p->x; dis[p->x] = p->dis; Q.push(M); } hash[st] = true; while(!Q.empty()) { P = Q.top(); Q.pop(); hash[P.x] = true; map[P.x] = &vex[P.x]; p = map[P.x]->next; for(; p != NULL; p = p->next) { if(!hash[p->x] && P.dis + p->dis < dis[p->x]) { dis[p->x] = P.dis + p->dis; M.dis = dis[p->x]; M.x = p->x; Q.push(M); } } } } int main() { int n, m; while(scanf("%d %d", &n, &m) && n + m) { Init(); while(m--) { int x, y, dis; scanf("%d %d %d", &x, &y, &dis); creat(x, y, dis); creat(y, x, dis); } BFS(1, n); printf("%d/n", dis ); } }
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int cost[105][105];
int n;
int dis[105];
bool hash[105];
const int MAX = 0x7fffffff;
void Dijkstra()
{
int i, j, k;
memset(hash, false, sizeof(hash));
hash[1] = true;
for(i = 2; i <= n; i++)
{
int s = MAX;
int t = 1;
for(j = 2; j <= n; j++)
{
if(dis[j] < s && !hash[j])//这里忘记了hash
{
s = dis[j];
t = j;
}
}
for(k = 2; k <= n; k++)
{
if(!hash[k] && cost[t][k] != MAX && dis[k] > dis[t] + cost[t][k])
{
dis[k] = dis[t] + cost[t][k];
}
}
hash[t] = true;
}
cout<<dis
<<endl;
}
int main()
{
int i, j, m;
while(scanf("%d %d", &n, &m) != EOF)
{
if(n == 0 && m == 0)
continue;
for(i = 0; i <= n; i++)
for(j = 0; j <= n; j++)
{
if(i == j)
cost[i][j] = 0;
else
cost[i][j] = MAX;
}
int a, b, t;
for(i = 0; i < m; i++)
{
scanf("%d %d %d", &a, &b, &t);
cost[a][b] = t;
cost[b][a] = t;
}
for(i = 1; i <= n; i++)
{
dis[i] = cost[1][i];
}
Dijkstra();
}
}
相关文章推荐
- hdu(2544)——最短路(邻接表+bellman-ford使用队列优化)
- 无向图邻接表怎么建,求指点!! HDU 2544 最短路(Dijkstra、结题报告 精简版!)
- 无向图邻接表怎么建,求指点!! HDU 2544 最短路(Dijkstra、结题报告 精简版!)
- HDU 2544 最短路 静态邻接表+优先队列 dijkstra
- HDU 2544 最短路 SPFA 邻接表 模板
- 无向图邻接表怎么建,求指点!! HDU 2544 最短路(Dijkstra、结题报告 精简版!)
- hdu 2544 最短路(Dijkstra 邻接表+优先队列)
- HDU 2544 最短路(spfa邻接表)
- HDU 2544 最短路 SPFA 邻接表 模板
- HDU 2544 最短路 floyd djkstra(邻接表,邻接矩阵) spfa bellman-ford 模板题
- 最短路 SPFA 判断负环 静态邻接表(链式前向星) HDU 2544 最短路 POJ 3259 Wormholes
- HDU 2544 最短路基础
- HDU 2544 ( 最短路 )
- hdu 2544 最短路
- HDU_2544——最短路,Dijkstra模版
- hdu 2544 最短路
- HDU 2544----最短路
- HDU 2544 单源最短路
- hdu 2544 最短路 (dij)
- HDU 2544 最短路 【最短路入门模板题】