数据结构二模热身题(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;
}

(二)
题目描述:
输入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;
}

本题主要带大家回顾了一下dijkstra算法的流程,是两道纯模板题,非常简单。
好了,本次的分享就先到这,大家有任何疑问或建议,欢迎在评论区留言,我们下期再见!

猜你喜欢

转载自blog.csdn.net/qq_46139801/article/details/113888719