Advertisement
yuawn

algo2017_week9_AStar

Nov 29th, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.17 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define INF 1e9
  4. #define fo(n) for(int i=0;i<n;i++)
  5. #define fos(o,n) for(int i=o;i<=n;i++)
  6. #define MAX 11
  7.  
  8. int w[MAX][MAX] , d[MAX];
  9. bool vis[MAX];
  10.  
  11. void dijkstra( int s ){
  12.     fo( MAX ) vis[i] = 0 , d[i] = INF;
  13.    
  14.     d[s] = 0;
  15.    
  16.     fo( MAX ){
  17.        
  18.         int a = -1 , min = INF;
  19.        
  20.         for( int j = 0 ; j < MAX ; ++j )
  21.             if( !vis[j] && d[j] < min ) a = j , min = d[j];
  22.            
  23.         if( a == -1 ) break;
  24.         vis[a] = 1;
  25.        
  26.         for( int j = 0 ; j < MAX ; ++j )
  27.             if( !vis[j] && d[a] + w[a][j] < d[j] ) d[j] = d[a] + w[a][j];
  28.        
  29.     }
  30. }
  31.  
  32.  
  33. int main(){
  34.    
  35.     fo( MAX )
  36.         for( int j = 0 ; j < MAX ; ++j )
  37.             w[i][j] = INF;
  38.  
  39.     cin >> w[0][1] >> w[0][2] >> w[0][3];  
  40.  
  41.     for( int i = 1 ; i < 5 ; i += 3 ){
  42.         for( int j = i ; j < i + 3 ; ++j )
  43.             for( int k = i + 3 ; k < i + 6 ; ++k )
  44.                 cin >> w[j][k];
  45.     }
  46.    
  47.     cin >> w[7][10] >> w[8][10] >> w[9][10];
  48.    
  49.     dijkstra( 0 );
  50.    
  51.     int s , ans = 1e7;
  52.    
  53.     cin >> s;
  54.    
  55.     for( int i = 1 + 3 * ( s - 2 ) ; i < 1 + 3 * ( s - 2 ) + 3 ; ++i ){
  56.         int mi = 1e7;
  57.         for( int j = 0 ; j < MAX ; ++j ) mi = min( mi , w[i][j] );
  58.         ans = min( ans , d[i] + mi );
  59.     }
  60.    
  61.     cout << ans << endl;
  62.    
  63.     return 0;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement