图算法面试

题目:

当你看到你的室友比你更有魅力时,你决定每晚跑步,因为他/她经常锻炼。

现在你有一本北京地名词典。它的形式是{location:elevation}。在百度地图上找到的连接各个地方的距离数组。
请找出最短路线的长度,在这条路线上你可以完全上坡,然后完全下坡。假设你住在"Huilongguan"(回龙观),
字典为elevations = {"Huilongguan": 5, "Chaoyang Park": 25, "National Stadium": 15, "Olympic Park": 20, "Tsinghua University": 10}
路径为:
paths = {
    ("Huilongguan", "Chaoyang Park"): 10,
    ("Huilongguan", "National Stadium"): 8,
    ("Huilongguan", "Olympic Park"): 15,
    ("Chaoyang Park", "Olympic Park"): 12,
    ("National Stadium", "Tsinghua University"): 10,
    ("Olympic Park", "Tsinghua University"): 5,
    ("Olympic Park", "Huilongguan"): 17,
    ("Tsinghua University", "Huilongguan"): 10
}
得到的最短的路径为:"Huilongguan" -> "National Stadium" -> "Tsinghua University" -> "Huilongguan", 最短距离为 28

代码:

public class HiretualTest {
	int ans = Integer.MAX_VALUE;
    public static void main(String[] args) {
        // 为地名编码
        // {"Huilongguan": 0, "Chaoyang Park": 1, "National Stadium": 2, "Olympic Park": 3, "Tsinghua University": 4}
        int[][] dirs = new int[5][5];
        dirs[0][1] = 10;
        dirs[0][2] = 8;
        dirs[0][3] = 15;
        dirs[1][3] = 12;
        dirs[2][4] = 10;
        dirs[3][4] = 5;
        dirs[3][0] = 17;
        dirs[4][0] = 10;

        HiretualTest main = new HiretualTest();
        main.dfs(dirs, 0, 0);
        System.out.println(main.ans);
    }

    private void dfs(int[][] dirs, int i, int sum){
        if (i == 0 && sum != 0) {
            ans = Math.min(ans, sum);
            return;
        }
        for (int j = 0; j < dirs[0].length; ++j)
            if (dirs[i][j] > 0)
                dfs(dirs, j, sum + dirs[i][j]);
    }
 
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值