- #include<stdio.h>
- #include<stdlib.h>
- const int N = 5 ;
- const int M = 999 ;
- int map[5][5] ;
- int hello[25][25] ;
- int main()
- {
- int start,end ;
- for(int i=0 ; i < 5 ;i++)
- { for(int j=0 ; j < 5 ;j++)
- {
- char a[2] ;
- scanf("%s",a) ;
- if(a[0]=='.')map[i][j]= 1 ;
- if(a[0]=='x')map[i][j]= 0 ;
- if(a[0]=='s')
- {
- map[i][j] = 1 ;
- start = i*5 + j ;
- }
- if(a[0]=='e')
- {
- map[i][j] = 1 ;
- end = i*5 + j ;
- }
- }
- }
- for(int i=0 ;i<25 ;i++)
- {
- for(int j=0;j<25;j++)
- {
- if( ((i>?j) - (i <? j) == 1 || (i>?j) - (i<?j)== 5) && map[i/5][i%5]==1 && map[j/5][j%5]==1)
- {
- hello[i][j] = 1 ;
- hello[j][i] = 1 ;
- }else
- {
- hello [i][j] = M ;
- hello [j][i] = M ;
- }
- }
- }
- /*for(int i=0 ;i<25 ;i++)
- {
- for(int j=0;j<25;j++)
- {
- printf("%d ",hello[i][j]) ;
- }
- printf("\n") ;
- }*/
-
- int parent[25] ;
- bool visit[25] ;
- int dis[25] ;
- for( int i = 0 ; i < 25 ; i ++ )
- {
- visit[i] = false ;
- dis[i] = M ;
- }
- parent[start] = start ;
- dis[start] = 0 ;
-
- for(int i = 0 ; i< 25 ;i++)
- {
- int min = M+1 , point = -1 ;
- for(int j=0 ; j < 25 ;j++)
- {
- if(visit[j] != true && dis[j] < min)
- {
- point = j ;
- min = dis[j] ;
- }
- }
-
- //printf("%d %d\n",point, visit[point]) ;
- //if(point == -1) break ;
- visit[point] = 1 ;
- for(int j=0 ; j< 25 ;j++)
- {
- if(!visit[j] && (dis[j] > dis[point]+hello[point][j]) )
- {
- dis[j] = dis[point]+hello[point][j] ;
- parent[j] = point ;
- }
- }
- }
- printf("%d %d",start,end) ;
- int val = end ;
- printf( "\nstart : %d , end : %d , fee : %d , path : %d " , start , end , dis[end] , end ) ;
- while( val != parent[val] )
- {
- printf( "-> %d" , parent[val] ) ;
- val = parent[val] ;
- }
-
-
-
- scanf (" ") ;
- }
複製代碼 |