zoukankan      html  css  js  c++  java
  • POJ 2387

      1 #include<iostream>
      2 #include<stdio.h>
      3 #define MAXN 1005
      4 #define inf 10000000
      5 using namespace std;
      6 int _m[MAXN][MAXN];
      7 int dij[MAXN];
      8 void Dijkstra(int m,int s);
      9 int main()
     10 {
     11     //freopen("acm.acm","r",stdin);
     12     int t;
     13     int n;
     14     int i;
     15     int j;
     16     int u;
     17     int v;
     18     int value;
     19     cin>>t>>n;
     20     for(i = 0; i < MAXN; ++ i)
     21     {
     22         for(j = 0; j < MAXN; ++ j)
     23         {
     24             _m[i][j] = inf;
     25     //        _m[j][i] = inf;
     26         }
     27     }
     28     for(i = 0; i < t; ++ i)
     29     {
     30         cin>>u>>v>>value;
     31         -- u;
     32         -- v;
     33         if(_m[u][v] > value)
     34         {
     35             _m[u][v] = value;
     36             _m[v][u] = value;
     37         }
     38     }
     39     //cout<<">>>>>>>>>"<<endl;
     40     Dijkstra(n,n-1);
     41 //    for(i = 0; i < n; ++ i)
     42 //    {
     43         cout<<dij[0]<<endl;
     44 //    }
     45 }
     46 
     47 void Dijkstra(int m,int s)
     48 {
     49     int i;
     50     int j;
     51     int min;
     52     int * mark = new int[m];                    
     53     memset(mark,0,m*sizeof(int));
     54     memset(dij,-1,sizeof(dij));
     55     dij[s] = 0;                                
     56     mark[s] = 1;                        
     57     int x;
     58     int k;
     59     min = -1;                                
     60     for(i = 0; i < m; ++ i)
     61     {
     62         if(_m[s][i] != inf)
     63             dij[i] = _m[s][i];
     64     //    cout<<"090900999  "<<dij[i]<<endl;
     65     }
     66     //for(i = 0; i < m; ++ i)
     67 //        {
     68 //            cout<<" dij "<<dij[i];
     69     //    }
     70     for(k = 0; k < m; k++)                    
     71     {                
     72         min = -1;                            
     73         for(j = 0; j < m; j++)                
     74         {
     75             if(mark[j] == 0 && dij[j] > 0)
     76             {
     77                 if(dij[j] < min || min < 0)
     78                 {
     79                     min = dij[j];            
     80                     x = j;
     81                 }
     82             }
     83         }
     84         
     85         mark[x] = 1;
     86     //    cout<<dij[x]<<"min"<<endl;
     87         
     88     //    cout<<"00000000000000"<<endl;
     89         for(i = 0; i < m; ++ i)                        
     90         {    
     91             if(mark[i] == 0 && _m[x][i] != inf)
     92             {
     93             
     94                 if(dij[i] < 0 || dij[x] + _m[x][i] < dij[i])
     95                 {
     96                     dij[i] = dij[x] + _m[x][i];
     97                 }
     98             }
     99         }
    100     }
    101     delete []mark;
    102 }
  • 相关阅读:
    数据结构与算法分析-二叉堆
    数据结构与算法分析-AVL树
    数据结构与算法分析-二叉查找树
    优秀程序员应具备的15个特性
    2016年1月22日 收盘后美加的走势
    2016年1月8日 12月非农数据
    Replace into 与Insert into on duplicate key update的区别
    MYSQL视图的学习笔记
    postgresql创建用户
    连接postgresql数据库
  • 原文地址:https://www.cnblogs.com/gavinsp/p/4568396.html
Copyright © 2011-2022 走看看