현재 위치 - 회사기업대전 - 엔터프라이즈 전체 - 최단 경로 알고리즘은 학교의 모든 건물과 도로를 탐색하며 도로가 통행할 수 있는지 여부를 표시합니다.

최단 경로 알고리즘은 학교의 모든 건물과 도로를 탐색하며 도로가 통행할 수 있는지 여부를 표시합니다.

/*

캠퍼스 가이드 상담

[문제 설명]

캠퍼스 가이드 방안을 설계하여 방문객에게 각종 정보 조회 서비스를 제공하다.

[기본 요구 사항]

(1) 10 이상의 관광지를 포함하여 학교의 캠퍼스 계획을 설계한다. 그림의 정점은 학교 내 관광지를 나타내며, 관광지의 이름, 코드, 프로필 등을 저장합니다. 경로는 모서리로 표시되며 경로 길이 및 기타 관련 정보가 저장됩니다.

(2) 관광객들에게 사진 속 어떤 관광지에 대한 정보를 제공한다.

(3) 관광객들에게 그림의 모든 관광지에 대한 방향 지침을 제공합니다. 즉, 두 관광지 사이의 가장 짧은 경로를 조회하십시오.

[구현 팁]

일반적으로 캠퍼스 내의 도로는 양방향이며 캠퍼스 계획이 무향 네트워크라고 가정할 수 있습니다. 정점과 가장자리 모두 관련 정보를 포함합니다.

수요 분석

1 중북대 평면도에서 10 개의 친숙한 관광지를 선택하여 무향 가중치도로 추상화한다 (그림 참조). 그림에서 정점은 관광지를 나타내고 가장자리의 가중치는 두 곳의 거리를 나타냅니다.

이 프로그램의 목적은 사용자에게 경로 상담과 관광지 조회를 제공하는 것이다. 사용자 지정 시작점과 끝점을 기준으로 해당 경로를 출력하거나 사용자 지정 관광지를 기준으로 관광지 정보를 출력합니다.

남방

북방

둘째, 윤곽 설계

이 기사에서는 1 데이터 구조를 사용합니다

*/

/* 헤더 파일 포함 */

# include & ltstdio.h & gt

# include & ltprocess.h & gt

/* 기호 상수 정의 */

#define INT_MAX 10000

# 정의 번호 10

/* 글로벌 변수 정의 */

Intcost [n] [n]; /* 모서리 값 */

Intshortest [n] [n]; /* 두 점 사이의 최단 거리 */

Intpath [n] [n]; /* 지나가는 관광지 */

/* 사용자 정의 함수 프로토타입에 대한 설명 */

Void introduce ();

Intshortestdistance ();

Voidfloyed ();

Void 디스플레이 (int I, int j);

두 사람의 분업

(1) 관광지 정보 조회

(2) 두 명소 사이의 최단 거리

(3) 두 명소 사이의 오솔길

셋째, 상세한 디자인

Void main ()

{/* 주 함수 */

Int I, j;

Char k;;

For(I = 0;; 나<= n;; I++)

For(j = 0;; J<= n;; J++)

비용 [I] [j] = int _ max;

Cost [1] [3] = cost [3] [1] = 2;

비용 [2][3]= 비용 [3] [2] =1;

원가 [2][4]= 원가 [4] [2] = 2;

Cost [3] [10] = cost [10] [3] = 4;

Cost [1] [10] = cost [10] [1] = 4;

Cost [2] [10] = cost [10] [2] = 4;

Cost [4] [10] = cost [10] [4] = 4;

Cost [1] [4] = cost [4] [1] = 5;

원가 [4][5]= 원가 [5] [4] = 3;

원가 [4][9]= 원가 [9] [4] = 4;

원가 [5][9]= 원가 [9] [5] = 8;

비용 [5][7]= 비용 [7] [5] = 4;

원가 [5][6]= 원가 [6] [5] = 2;

비용 [6][7]= 비용 [7] [6] =1;

비용 [7][8]= 비용 [8] [7] = 3;

비용 [8][6]= 비용 [6] [8] = 4;

Cost [1] [1] = cost [2] [2] = cost [3] [3] = cost [4]]

원가 [6][6]= 원가 [7][7]= 원가 [8][8]= 원가 [9][9]= 원가 [10]]

While( 1)

{

Printf ("-중북대학교 가이드 시스템에 오신 것을 환영합니다! -\ n ");

Printf(" 1. 관광지에 대한 정보 ... I (소개) \ n ");

Printf("2. 관광지 최단 경로 조회 ... s (shortest distance \ n ");

Printf("3. 시스템을 종료합니다 ..................................................................................................................................................................................................................................................................................................................

Printf ("학교 명소 목록: \ n");

Printf(" 1: 학교 남문 ");

Printf("2: 학생 아파트 ");

Printf(《3: 베를린 가든);

Printf("4: 식당 ");

Printf("5: 체육관 \ n ");

Printf("6: 라이브러리 ");

Printf("7: 핵심 실험실 ");

Printf("8: 본관 ");

Printf("9: 코원 ");

Printf(" 10: 국방 아파트 \ n ");

Printf ("서비스를 선택하십시오:");

Scanf("\n%c ",k);

스위치 (k)

{

사례' I':

Printf ("관광지 정보 조회 입력:");

소개 ();

깨뜨리다

시나리오:

Printf ("최단 경로 조회 입력:");

Shortestdistance ();

깨뜨리다

사례' e':

종료 (0);

기본값:

Printf ("입력 정보가 잘못되었습니다! \n 문자 I 또는 s 또는 e, \ n ") 를 입력하십시오.

깨뜨리다

}

}

}/* 메인 */

Void 도입 ()

{/* 관광지 소개 */

Int a;;

Printf ("구체적으로 어떤 관광지를 조사해야 하나요? 관광지 번호를 입력하십시오: ");

Scanf("%d ",a);

Getchar ();

Printf ("\ n");

스위치 (a)

{

사례 1:

Printf(" 1: 학교 남문 \n\n 학교 정문에는 펜덕화 석상이 우뚝 솟아 있어 웅장하다. \ n \ n "); 깨뜨리다

사례 2:

Printf("2: 학생 아파트가 모이는 곳. \ n \ n "); 깨뜨리다

사례 3:

Printf("3: 베를린 가든 \ n \ n \ nA 아침 읽기와 운동을 하는 곳. \ n \ n "); 깨뜨리다

시나리오 4:

Printf("4: 식당 \ n \ n 학생과 선생님이 식사하는 곳 \ n \ n "); 깨뜨리다

시나리오 5:

Printf("5: 체육관 \ n \ nGymnasium \ n \ nA 학생들이 육상 경기장, 축구장, 농구장 등 체육 수업과 운동을 하는 장소. \ n \ n "); 깨뜨리다

시나리오 6:

Printf(" 6:Library \ n \ n \ n 학교 정보 자원 센터에는 많은 학습실이 있습니다. \ n \ n "); 깨뜨리다

시나리오 7:

Printf("7: 우리 학교 중점 실험실 \ n \ n 연구 및 연구 센터 \ n \ n "); 깨뜨리다

시나리오 8:

Printf("8: 본관 \ n \ n \ 학교 행정사무실의 본관. \ n \ n "); 깨뜨리다

시나리오 9:

Printf("9: 이코 가든 \ n \ n \ 여기 카페와 상영실이 있습니다. \ n \ n \ n "); 깨뜨리다

시나리오 10:

Printf(" 10: 국방생 아파트 \n\n 국방생 거주지. \ n \ n "); 깨뜨리다

기본값:

Printf ("관광지 번호 입력 오류! 1-> 를 입력하십시오 수량 10! \ n \ n "); 깨뜨리다

}

}/* 소개 */

Int shortestdistance ()

두 명소 사이의 최단 거리 찾기 */

Int I, j;

Printf ("조회할 두 명소의 번호를 입력하십시오 (1-> 숫자 10 의 숫자는',' 간격): ";

Scanf("%d, %d ",I, j);

(I>n | | I<= 0 | | j>n | | j<0)

{

Printf ("입력 정보가 잘못되었습니다! \ n \ n ");

Printf ("조회할 두 명소의 번호를 입력하십시오 (1-> 10 의 숫자를',' 간격으로 번호 지정): \ n ");

Scanf("%d, %d ",I, j);

}

기타

{

Floyed ();

표시 (I, j);

}

1;

}/* 최단 거리 */

빈 floyed ()

플로이드 알고리즘을 사용하여 두 명소 사이의 최단 경로 찾기 */

Int I, j, k;

For (I =1; 나<= n;; I++)

For (j =1; J<= n;; J++)

{

가장 짧은 [I][j]= 비용 [I] [j];

Path [I] [j] = 0;

}

For (k =1; K<= n;; K++)

For (I =1; 나<= n;; I++)

For (j =1; J<= n;; J++)

If (shortest [I] [j] > (shortest[i][k]+shortest[k][j])

{/* path[][] 를 사용하여 I ~ j 최단 경로에 있는 j 점의 전조 관광지 번호 */

가장 짧은 [I][j]= 가장 짧은 [I][k]+ 가장 짧은 [k] [j];

경로 [I] [j] = k;

Path [j] [I] = k;

}

}/*floyed*/

빈 디스플레이 (int I, int j)

두 관광지의 경로와 최단 거리 인쇄 */

Int a, b;

A = I;;

B = j;;

Printf ("조회해야 할 두 관광지 사이의 최단 경로는 \ n \ n");

If (가장 짧은 [i][j]! =INT_MAX)

{

만약 (나<j)

{

Printf("%d ",b);

While (경로 [I] [j]! =0)

I ~ j 노선에 있는 모든 관광지를 거꾸로 인쇄합니다. */

Printf(" & lt;; -%d ",경로 [I] [j]);

만약 (나<j)

J = 경로 [I] [j];

기타

I = path [j] [I];

}

Printf(" & lt;; -%d ",a);

Printf ("\ n \ n");

Printf ("(%d-> %d) 가장 짧은 거리는 %d 미터 \n\n ",a, b, 가장 짧은 [a] [b]) 입니다.

}

기타

{

Printf("%d ",a);

While (경로 [I] [j]! =0)

I ~ j 노선에 있는 모든 관광지를 순서대로 인쇄합니다. */

Printf ("-> %d', 경로 [I] [j]);

만약 (나<j)

J = 경로 [I] [j];

기타

I = path [j] [I];

}

Printf ("-> %d', b);

Printf ("\ n \ n");

Printf ("(%d-> %d) 가장 짧은 거리는 %5d m \n\n ",a, b, 가장 짧은 [a] [b]) 입니다.

}

}

기타

Printf ("입력 오류! 이 길은 존재하지 않는다! \ n \ n ");

Printf ("\ n");

}/* 표시 */

copyright 2024회사기업대전