Tuesday, February 07, 2012

Dijkstra Algorithm with STL Priority Queue

/***
    NLOGN Dijkstra Algorithm with STL Priority Queue
    Author : Md.Saiful Islam Saif
***/


#include<stdio.h>
#include<queue>
#define INF 2000000
using namespace std;


int mat[200][200],dis[200];


struct pq{
int i,c;


bool operator <(const pq &b)const
{
return c>b.c;
}
};


int main()
{
int n,i,j,m,s,t,u,v,w;
pq cur,ad;
priority_queue< pq >Q;


while(scanf("%d%d%d%d",&n,&m,&s,&t)==4)
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
mat[i][j] = INF;
dis[i] = INF;
}


for(i=0;i<m;i++)
{
scanf("%d%d%d",&u,&v,&w);
mat[u][v] = mat[v][u] = w;
}
dis[s] = 0;
cur.i = s;
cur.c = 0;
Q.push(cur);


while(!Q.empty())
{
cur = Q.top();
Q.pop();


for(i=0;i<n;i++)
if(mat[cur.i][i] + dis[cur.i] < dis[i])
{
ad.c = dis[i] = mat[cur.i][i] + dis[cur.i];
ad.i = i;
Q.push(ad);
}
}
printf("DIS: %d\n",dis[t]);
}
return 0;
}


/*
Input:
4 5 0 3
0 1 3
1 2 2
0 2 6
0 3 99
2 3 90
Output:
DIS: 95
*/

No comments:

Post a Comment