티스토리 뷰

#include<stdio.h>
#include<stdlib.h>
#include<limits.h>

#define MAX 8
#define TRUE 1
#define FALSE 0

int cost[][MAX] =
{{0,9999,9999,9999,9999,9999,9999,9999},
{300,0,9999,9999,9999,9999,9999,9999},
{1000,800,0,9999,9999,9999,9999,9999},
{9999,9999,1200,0,9999,9999,9999,9999},
{9999,9999,9999,1500,0,250,9999,9999},
{9999,9999,9999,1000,9999,0,900,1400},
{9999,9999,9999,9999,9999,9999,0,1000},
{1700,9999,9999,9999,9999,9999,9999,0}};

char * name_arr[MAX] = {"LosAngeles  ", "SanFrancisco", "Denver      ", "Chicago     "
                      ,"Boston      ", "NewYork     ", "Miami       ", "NewOrleans  "};

void shortestpath(int v, int cost[][MAX], int distance[], int n, short int found[]);
int choose(int distance[], int n, short int found[]);

int main()
{
int i;
int input;
int distance[MAX];
short int found[MAX] = {FALSE};
int n = MAX;

for(i=0; i<MAX; i++)
    printf("%d : %s\n", i+1, name_arr[i]);

while(1)
{
    printf("\n출발할 도시번호를 입력하세요(1-8) : " );
       scanf("%d", &input);
       if(input >=1 && input <= 8) break;
       printf("잘못된 입력입니다!!\n");
    }
   printf("==================================\n");
shortestpath(input-1, cost, distance, MAX, found);
for(i=0; i<MAX; i++)
   {
       if(distance[i] == 9999)
           printf("%s : 없음\n", name_arr[i]);
       else   
           printf("%s : %d\n", name_arr[i], distance[i]);
 
}
  
   system("pause");
return 0;
}// main


//function shortestpath
void shortestpath(int v, int cost[][MAX], int distance[], int n, short int found[])
{
int k, u, w;
for (k=0; k<n; k++){
 found[k] = FALSE;
 distance[k] = cost[v][k];
}

found[v] = TRUE;
distance[v] = 0;
for(k=0; k<n-2; k++){
 u = choose(distance, n, found);
 found[u] = TRUE;
 for(w=0; w<n; w++)
  if(!found[w])
   if(distance[u] + cost[u][w] < distance[w])
    distance[w] = distance[u] + cost[u][w];
}
}// end shortestpath function


//function choose
int choose(int distance[], int n, short int found[]){
int k, min, minpos;
min = INT_MAX;
minpos = -1;
for(k=0; k<n; k++)
 if( (distance[k] < min) && (!found[k]) ){
  min = distance[k];
  minpos = k;
 }
return minpos;
}

댓글
안내
궁금한 점을 댓글로 남겨주시면 답변해 드립니다.