zoukankan      html  css  js  c++  java
  • 第十一周周任务

    非负权单源最短路
    描述
    给一个n( 1 <= n <= 2500 )个点,m条边( 1 <= m <= 6200 ) 的无向图,求s到t的最短路。
    输入
    第一行四个由空格隔开的整数 n、m、s、t。之后的m行,每行三个正整数 s[i]、t[i]、wi,表示一条从s[i]到t[i]长度为w[i]的边。
    输出
    一个整数表示从s到t的最短路长度。数据保证至少存在一条道路。
    输入样例
    7 11 5 4
    2 4 2
    1 4 3
    7 2 2
    3 4 3
    5 7 5
    7 3 3
    6 1 1
    6 3 4
    2 4 3
    5 6 3
    7 2 1
    输出样例
    7

    AC代码:

    #include <bits/stdc++.h>
    using namespace std;
    
    int cost[3000][3000];
    int d[2505];
    int vis[2505];
    int main()
    {
        memset(cost ,0x3f ,sizeof(cost));
        memset(vis, 0, sizeof(vis));
        
        int n, m, s, t;
        scanf("%d%d%d%d", &n, &m, &s, &t);
        for (int i = 0; i < m; i++) {
            int s0, t0, w0;
            scanf("%d%d%d", &s0, &t0, &w0);
            cost[s0][t0] = min(cost[s0][t0], w0);
            cost[t0][s0] = min(cost[t0][s0], w0);
        }
        memset(d, 0x3f, sizeof(d));
        d[s] = 0;
        
        while (1) {
            int v = -1;
            for (int i = 1; i <= n; i++) {
                if (vis[i]==0 && (v==-1||d[i]<d[v])) v = i;
            }
            
            if (v==-1) break;
            vis[v] = 1;
            
            for (int i = 1; i <= n; i++)
                d[i] = min(d[i], d[v]+cost[v][i]);
        }
        
        printf("%d", d[t]);
        
        return 0;    
    } 
    View Code
  • 相关阅读:
    十一.状态设计模式
    十. 享元设计模式
    Orcale(一)概念
    java类加载器
    spring中的事务管理机制
    spring中的annotation注解类配置
    countDownLatch和Semaphore用于多线程
    布隆过滤器
    mybatis-genator自动生成的mapper中模糊查询使用方法
    java中的异常
  • 原文地址:https://www.cnblogs.com/wizarderror/p/10914985.html
Copyright © 2011-2022 走看看