データ構造の2番目のモデルのウォームアップの質問(1)

(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つの純粋なテンプレートの質問です。
さて、この共有はここで止まります。ご質問やご提案がございましたら、コメント欄にメッセージを残してください。次号でお会いしましょう!

おすすめ

転載: blog.csdn.net/qq_46139801/article/details/113888719