목차
1.개 요
2.플로이드 알고리즘에 사용된 자료구조
3.플로이드 알고리즘의 문제 해결 방법
4.예 시
5.방 법
6.플로이드 알고리즘의 의사코드
7.플로이드 알고리즘의 의사코드(최단거리 경로 추가)
8.최단경로 출력
2.플로이드 알고리즘에 사용된 자료구조
3.플로이드 알고리즘의 문제 해결 방법
4.예 시
5.방 법
6.플로이드 알고리즘의 의사코드
7.플로이드 알고리즘의 의사코드(최단거리 경로 추가)
8.최단경로 출력
본문내용
1.72}
,{100,100,100,100,100,6.28,100,100,5.06,3.9,100,100,1.72,0} };
//제공된 테이블을 직접 입력하였습니다.
void main()
{
int start,finish;
printf("출발할 도시와 도착할 도시 입력 ex)1~5\n");
scanf("%d~%d",&start,&finish);
printf("출발할 도시 %d이고 도착할 도시 %d \n",start,finish);
start--;
finish--;
//위치보정(도시는 1부터 있는데 c++은 0부터 시작하기 때문에 위치를 보정해 주었습니다.)
//그러니까 4라는 도시에서 출발하는데 4라고 치면 실제로는 3이라는 도시로 출발하기때문에
//start--;finish--; 를 사용하여 위치를 교정해 주었습니다.
int i,k;
double min;
struct node_info city[14];
/* table 값 대칭 확인
for (i=0; i<14;i++)
for (j=0; j<14;j++)
if(dist_table[i][j] != dist_table[j][i])
printf("%d,%d ", i,j);
*/
for (i=0; i<14;i++)
{
city[i].dist = dist_table[finish][i];
city[i].from = finish;
city[i].flag = 0;
}
// 마지막 노드를 초기화
city[finish].dist = 0;
city[finish].from = finish;
city[finish].flag = 1;
int p = finish;//마지막 노드부터 역추적
for(i=0;i<12;i++)//
{
min = 100;
for (k=0;k<14;k++)
{
if ((city[k].flag == 0)&&(min > city[k].dist))
{
min = city[k].dist;//if문을 사용하여 더 작은 min있으시 교환
p = k;
}
}//마지막노드와 가장 가까운 노드 찾기
city[p].flag = 1;
for (k=0;k<14;k++)// 위에서 찾은 노드로 나머지에 대한 거리 재계산
{
if(city[k].dist > (min + dist_table[p][k]))//종점에서 현위치 까지의 거리
{
city[k].dist = min + dist_table[p][k];
city[k].from = p;
}
}
}
/*
for (k=0;k<14;k++)
{
printf("%d ", city[k].from);
}
*/
printf("도시 %d과 도시 %d의 최단 거리는 %f입니다. \n" , start+1, finish+1, city[start].dist );
printf("그리고 최단경로는 \n입니다.");
p = start;
while(true) //시작노드부터 차례로 화면에 출력
{
printf("%d => ", p +1);
p = city[p].from;
if (p == finish)
{
printf("%d 이다.\n", p+1);
break;
}
}
return;
}
,{100,100,100,100,100,6.28,100,100,5.06,3.9,100,100,1.72,0} };
//제공된 테이블을 직접 입력하였습니다.
void main()
{
int start,finish;
printf("출발할 도시와 도착할 도시 입력 ex)1~5\n");
scanf("%d~%d",&start,&finish);
printf("출발할 도시 %d이고 도착할 도시 %d \n",start,finish);
start--;
finish--;
//위치보정(도시는 1부터 있는데 c++은 0부터 시작하기 때문에 위치를 보정해 주었습니다.)
//그러니까 4라는 도시에서 출발하는데 4라고 치면 실제로는 3이라는 도시로 출발하기때문에
//start--;finish--; 를 사용하여 위치를 교정해 주었습니다.
int i,k;
double min;
struct node_info city[14];
/* table 값 대칭 확인
for (i=0; i<14;i++)
for (j=0; j<14;j++)
if(dist_table[i][j] != dist_table[j][i])
printf("%d,%d ", i,j);
*/
for (i=0; i<14;i++)
{
city[i].dist = dist_table[finish][i];
city[i].from = finish;
city[i].flag = 0;
}
// 마지막 노드를 초기화
city[finish].dist = 0;
city[finish].from = finish;
city[finish].flag = 1;
int p = finish;//마지막 노드부터 역추적
for(i=0;i<12;i++)//
{
min = 100;
for (k=0;k<14;k++)
{
if ((city[k].flag == 0)&&(min > city[k].dist))
{
min = city[k].dist;//if문을 사용하여 더 작은 min있으시 교환
p = k;
}
}//마지막노드와 가장 가까운 노드 찾기
city[p].flag = 1;
for (k=0;k<14;k++)// 위에서 찾은 노드로 나머지에 대한 거리 재계산
{
if(city[k].dist > (min + dist_table[p][k]))//종점에서 현위치 까지의 거리
{
city[k].dist = min + dist_table[p][k];
city[k].from = p;
}
}
}
/*
for (k=0;k<14;k++)
{
printf("%d ", city[k].from);
}
*/
printf("도시 %d과 도시 %d의 최단 거리는 %f입니다. \n" , start+1, finish+1, city[start].dist );
printf("그리고 최단경로는 \n입니다.");
p = start;
while(true) //시작노드부터 차례로 화면에 출력
{
printf("%d => ", p +1);
p = city[p].from;
if (p == finish)
{
printf("%d 이다.\n", p+1);
break;
}
}
return;
}
추천자료
조직에 있어서의 집단역학(개념.분류.응집력.의사결정)
가족치료 - 문제청소년사례(구조, 의사소통가족치료 적용)
치매환자와의 의사소통 장애에 대한 이해와 대처방안
나의 구매의사 결정 과정 및 이의 활용
통합의 리더십을 읽고 - 진정한 의사소통의 방법
비언어적 의사소통의 종류와 영화 속 표현양상
창의적 아이디어 도출을 위한 의사결정기법으로써의 시네틱스
후쿠자와 유키치의 탈아론, 안중근의사의 동양 평화론
의사결정 분석
사회복지조직의 의사소통
부부갈등과 의사소통(가정생활교육, 남성여성차이, 채프먼, 가정생활교육, 사랑언어) PPT, ...
★ 글쓰기와 의사소통 - 20대 우리가 해야 할 일
경영정보시스템 엑셀실습과제: 개인대출금 부분상환 의사결정, 부동산 재산의 증여/상속 결정
글쓰기와 의사소통 - 사소하지만 중요한 것, 안전벨트 ( 주제선정 이유, 안전벨트의 중요성, ...
소개글