(1)
タイトルの説明:
6つの頂点と9つのエッジを入力して、ソースポイント1から5までの最短パスを見つけます。(ダイレクトネット)
入力例:
6 9
1 2 7
1 3 9
1 6 14
2 3 10
2 4 15
3 6 2
5 6 9
4 5 6
3 4 11
サンプル出力:
26
サンプル図:
参照コード:
#include <stdio.h>
#include <string.h>
#define INF 65535
int n,m;
int map[7][7];
int visited[7];
int dist[7];
void init()
{
int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
map[i][j]=INF;
}
}
void dijkstra(int s)
{
memset(visited,0,sizeof(visited));
int i,j;
for(i=1;i<=n;i++)
dist[i]=map[s][i];
for(i=1;i<n;i++)
{
int min=INF,pos;
for(j=1;j<=n;j++)
{
if(visited[j]==0&&dist[j]<min)
{
min=dist[j];
pos=j;
}
}
visited[pos]=1;
for(j=1;j<=n;j++)
{
if(visited[j]==0&&dist[j]>dist[pos]+map[pos][j])
dist[j]=dist[pos]+map[pos][j];
}
}
}
int main()
{
scanf("%d%d",&n,&m);
init();
int i,x,y,z;
for(i=0.;i<m;i++)
{
scanf("%d%d%d",&x,&y,&z);
map[x][y]=z;//有向网
}
dijkstra(1);
printf("%d",dist[5]);
return 0;
}
(2)
タイトルの説明:
6つの頂点と9つのエッジを入力して、ソースポイント1から5までの最短パスを見つけます。(無向ネット)
入力例:
6 9
1 2 7
1 3 9
1 6 14
2 3 10
2 4 15
3 6 2
5 6 9
4 5 6
3 4 11
サンプル出力:
20
サンプル図:
参照コード:
#include <stdio.h>
#include <string.h>
#define INF 65535
int n,m;
int map[7][7];
int dist[7];
int visited[7];
void init()
{
int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
map[i][j]=INF;
}
}
void dijkstra(int s)
{
memset(visited,0,sizeof(visited));
int i,j;
for(i=1;i<=n;i++)
dist[i]=map[s][i];
for(i=1;i<n;i++)
{
int min=INF,pos;
for(j=1;j<=n;j++)
{
if(visited[j]==0&&dist[j]<min)
{
min=dist[j];
pos=j;
}
}
visited[pos]=1;
for(j=1;j<=n;j++)
{
if(visited[j]==0&&dist[j]>dist[pos]+map[pos][j])
dist[j]=dist[pos]+map[pos][j];
}
}
}
int main()
{
scanf("%d%d",&n,&m);
init();
int i,x,y,z;
for(i=0;i<m;i++)
{
scanf("%d%d%d",&x,&y,&z);
map[x][y]=map[y][x]=z;//无向网。
}
dijkstra(1);
printf("%d",dist[5]);
return 0;
}
この質問では、主にダイクストラアルゴリズムのプロセスを確認します。これらは、非常に単純な2つの純粋なテンプレートの質問です。
さて、この共有はここで止まります。ご質問やご提案がございましたら、コメント欄にメッセージを残してください。次号でお会いしましょう!