最短路径
View Code
#include <iostream>
using namespace std;
const int inf=999999999;
int N,E;
int dis[100];
bool used[100];
int map[100][100];
int dijk(int s,int e)
{
memset(dis,255,sizeof(dis)); //初始化为-1,表示不可达
memset(used,0,sizeof(used)); //均标记为未被访问
dis[s]=0;
used[s]=true;//标记s点
int i,j;
for(i=1;i<=N;i++)
{
if(i!=s)
{
if(map[s][i]!=-1)
dis[i]=map[s][i]; //为dis数组赋值
}
}
for(i=1;i<N;i++)
{
int next;
int min=inf;
for(j=1;j<=N;j++)
{
if(!used[j] && dis[j]!=-1 && dis[j]<min) //未访问 相邻点 距离近
{
min=dis[j];
next=j;
}
}
used[next]=true; //加入
for(j=1;j<=N;j++)
{
if(!used[j] && map[next][j]!=-1 && (dis[next]+map[next][j]<dis[j] || dis[j]==-1)) //未访问 相邻点 距离变近
{
dis[j]=dis[next]+map[next][j]; //修改
}
}
}
return dis[e];
}
int main()
{
memset(map,255,sizeof(map));
cin>>N>>E;
int i;
int s,t,d;
for(i=0;i<E;i++)
{
cin>>s>>t>>d;
map[s][t]=d;
map[t][s]=d;
}
int start,end;
while(cin>>start>>end)
cout<<dijk(start,end)<<endl;
return 0;
using namespace std;
const int inf=999999999;
int N,E;
int dis[100];
bool used[100];
int map[100][100];
int dijk(int s,int e)
{
memset(dis,255,sizeof(dis)); //初始化为-1,表示不可达
memset(used,0,sizeof(used)); //均标记为未被访问
dis[s]=0;
used[s]=true;//标记s点
int i,j;
for(i=1;i<=N;i++)
{
if(i!=s)
{
if(map[s][i]!=-1)
dis[i]=map[s][i]; //为dis数组赋值
}
}
for(i=1;i<N;i++)
{
int next;
int min=inf;
for(j=1;j<=N;j++)
{
if(!used[j] && dis[j]!=-1 && dis[j]<min) //未访问 相邻点 距离近
{
min=dis[j];
next=j;
}
}
used[next]=true; //加入
for(j=1;j<=N;j++)
{
if(!used[j] && map[next][j]!=-1 && (dis[next]+map[next][j]<dis[j] || dis[j]==-1)) //未访问 相邻点 距离变近
{
dis[j]=dis[next]+map[next][j]; //修改
}
}
}
return dis[e];
}
int main()
{
memset(map,255,sizeof(map));
cin>>N>>E;
int i;
int s,t,d;
for(i=0;i<E;i++)
{
cin>>s>>t>>d;
map[s][t]=d;
map[t][s]=d;
}
int start,end;
while(cin>>start>>end)
cout<<dijk(start,end)<<endl;
return 0;
这是自己又一次写dijkstra算法了,希望能够渐渐熟练起来...