캠퍼스 가이드 상담
[문제 설명]
캠퍼스 가이드 방안을 설계하여 방문객에게 각종 정보 조회 서비스를 제공하다.
[기본 요구 사항]
(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");
}/* 표시 */