zoukankan      html  css  js  c++  java
  • 最短路径

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    int N, M, map[1010][1010], dis[1010], hash[1010], cnt, dp[1010];
    const int inf = 0x7fffffff;
    void Dijsktra () {
         dis[2] = 0;
         for ( int i = 1; i <= N; i++ ) {
              int pos, t = inf;
              for ( int j = 1; j <= N; j++ ) {
                     if ( hash[j] == 0 ) {
                         if ( dis[j] < t ) {
                             t = dis[j]; pos = j;    
                         }    
                     }   
              }   
              hash[pos] = 1;
              for ( int j = 1; j <= N; j++ ) {
                     if ( hash[j] == 0 ) {
                         if ( map[pos][j] != inf && dis[j] > dis[pos] + map[pos][j] ) {
                               dis[j] = dis[pos] + map[pos][j];    
                         }    
                     }   
              }
         }
    }
    int DFS ( int x ) {
         if ( x == 2  ) {
              cnt++; return 1;    
         }        
         if ( dp[x]  ) {
              cnt++; return dp[x];    
         }
        
         for ( int i = 1; i <= N; i++ ) {
              if ( hash[i] == 0  ) {
                  if ( map[x][i] != inf &&dis[i] < dis[x] )  {
                          hash[i] = 1;
                          dp[x] += DFS ( i );
                          hash[i] = 0;   
                  }   
              }   
         }
         return dp[x];
    }
    int main () {
         while ( scanf ( "%d", &N ), N ) {
               scanf ( "%d", &M );
               int x, y, val;
               for ( int i = 1; i <= N; i++ ) {
                    dis[i] = inf ; hash[i] = 0;
                    for ( int j = 1; j <= N; j++ )
                         map[i][j] = inf;  
               } 
               for ( int i = 1; i <= M; i++ ) {
                    scanf ( "%d%d%d", &x, &y, &val );
                    if ( map[x][y] > val )  {
                        map[x][y] = map[y][x] = val;    
                    }
               }
               Dijsktra ();
               cnt = 0;
               memset ( hash, 0, sizeof (hash) );
               memset ( dp, 0, sizeof (dp) );
               DFS (1)
               printf ( "%d\n",  cnt );
         }
         return 0;  
    }
     
    ////////////////////////
     
    #include<stdio.h>
    #include<string.h>
    int map[110][110],dis[110], hash[110], N, M, x, y, v;
    const int inf = 0x7fffffff;
    int iii = 0x7f7f7f7f;
    int Dijkstra () {
        for ( int i = 1; i <= N; ++ i ) {
            dis[i] = inf;
            hash[i] = 0;
        }
        dis[1] = 0;
        for ( int i = 1; i <= N; ++ i ) {
            int t = inf, pos = 0;
            for ( int j = 1; j <= N; ++ j ) {
                if ( !hash[j] ) {
                    if ( dis[j] < t ) {
                         t = dis[j];
                         pos = j;   
                    }    
                }    
            }  
            hash[pos] = 1;
            //if ( pos == N ) break;
            for ( int j = 1; j <= N; ++ j ) {
                if ( !hash[j] && map[pos][j] != inf ) {
                   if ( dis[j] > dis[pos] + map[pos][j] ) {
                        dis[j] = dis[pos] + map[pos][j];   
                   }     
                }    
            }  
        }    
        return dis[N];
    }
    int main( )
    {
        while ( scanf ( "%d%d", &N, &M ) , N || M ) {
              for ( int i= 1; i <= N; ++ i ) {
                  for ( int j = 1; j <= N; ++ j ) map[i][j] = inf;    
              }      
             // memset ( map, 0x7f, sizeof ( map ) );
             for ( int i = 1; i <= M ; ++ i ) {
                 scanf ( "%d%d%d", &x, &y, &v );
                 map[x][y] = map[y][x] = v;    
             }   
             printf ( "%d\n", Dijkstra () );
        }
        return 0;
    }
     
  • 相关阅读:
    双日历时间段选择控件—daterangepicker(汉化版)
    vue elementui table表格展开行每次只展开一行
    vue-pdf PDF文件预览
    async await
    vuex发送axios请求
    jq调用浏览器下载文件 window.open()
    禁止页面右键、选择、F12操作
    vue 点击一条消息跳转相应的页面且对应相应的大模块和办理状态
    vue-infinite-scroll 滚动加载下一页
    填写流程当前登录人可以填写除自己可填项外还可看到他前面经办人相关填写的内容,且经办人后面的不可见
  • 原文地址:https://www.cnblogs.com/QQbai/p/2135278.html
Copyright © 2011-2022 走看看