图最小路程

9 篇文章 0 订阅
package main

import (
	"fmt"
)

func main(){
	var n int
	fmt.Scan(&n)

	var arr [][]int //二维数组初始化
	for i := 0; i < n+1; i++ {
		tmp := make([]int, n+1)
		arr = append(arr, tmp)
	}

	var a int   //存储到数组里面
	var b int
	for i:=1;i<n;i++{
		fmt.Scan(&a)
		fmt.Scan(&b)
		arr[a][b]=1
	}

	for i:=1;i<n+1;i++{
		for j:=1;j<n+1;j++{
			fmt.Print(arr[i][j]," ")
		}
		fmt.Print("\n")

	}

	dfs(1,0,arr,n)
	fmt.Println("max=",max)
	fmt.Println("min path=",2*n-2-max)
}


/*
   1、二维数组存图,有对称的问题
   2、避免回溯的时候陷入死循环,走过的路要干掉,回头再变回来
   3、二维数组的初始化,居然用两个append
 */

var max int
func dfs(begin int,len int,arr [][]int,n int){
    if max<len{max = len}
	for i:=1;i<n+1;i++{
		if arr[begin][i]==1 || arr[i][begin]==1{
            arr[begin][i]= 0
            arr[i][begin]=0
			dfs(i,len+1,arr,n)
			arr[begin][i]= 1
			arr[i][begin]= 1
		}
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值