ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

go最短路

2021-08-14 01:01:42  阅读:163  来源: 互联网

标签:vis int 短路 ++ edge go fmt dis


链接:https://acm.hdu.edu.cn/showproblem.php?pid=2544

package main

import (
	"fmt"
	"math"
)

var (
	n int //n个点
	m int //m条边
	edge [][]int
)

func dij(st, ed int) {
	vis := make([]bool, n)
	dis := make([]int, n)
	for i := 0; i < n; i++ {
		dis[i] = edge[st][i]
	}
	vis[st] = true
	for i := 0; i < n; i++ {
		if vis[ed] {
			break
		}
		minn := math.MaxInt64
		v := -1
		for j := 0; j < n; j++ {
			if !vis[j] && dis[j] < minn {
				minn = dis[j]
				v = j
			}
		}
		vis[v] = true
		for j := 0; j < n; j++ {
			if !vis[j] && dis[v] + edge[v][j] < dis[j] {
				dis[j] = dis[v] + edge[v][j]
			}
		}
	}
	fmt.Println(dis[ed])
}

func main() {
	for {
		fmt.Scanf("%d %d", &n, &m)
		if n == 0 && m == 0 {
			break
		}
		edge = make([][]int, n)
		for i := 0; i < n; i++ {
			edge[i] = make([]int, n)
		}
		for i := 0; i < n; i++ {
			for j := 0; j < n; j++ {
				if i == j {
					edge[i][j] = 0
				} else {
					edge[i][j] = math.MaxInt64
				}
			}
		}
		for i := 0; i < m; i++ {
			var (
				a int
				b int
				c int
			)
			fmt.Scanf("%d %d %d", &a, &b, &c)
			a--
			b--
			edge[a][b] = int(math.Min(float64(edge[a][b]), float64(c)))
			edge[b][a] = edge[a][b]
		}
		//fmt.Println(edge)
		dij(0, n - 1)
	}
}

  

标签:vis,int,短路,++,edge,go,fmt,dis
来源: https://www.cnblogs.com/yuanweidao/p/15139656.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有