#include #include #include #include #include using namespace std; #define ALLNameNum 99 #define INF 99999 typedef int dist[ALLNameNum]; typedef int path[ALLNameNum]; typedef struct { char name[100]; char intro[999]; int x, y; }SITE; typedef struct { SITE site[ALLNameNum]; int length[ALLNameNum][ALLNameNum]; }MAP; MAP M; int N = 0; path p; dist d; void init() { int i, j; strcpy(M.site[1].name, "ƻ��԰"); strcpy(M.site[1].intro, "������ʯ��ɽ����λ��ƻ��԰��·"); strcpy(M.site[2].name, "�ų�"); strcpy(M.site[2].intro, "λ�ڱ�����ʯ��ɽ��ʯ��ɽ·��ų�С�ֽ��ᶫ��"); strcpy(M.site[3].name, "�˽�����԰"); strcpy(M.site[3].intro, "ʯ��ɽ���˽������Ŷ���"); strcpy(M.site[4].name, "������"); strcpy(M.site[4].intro, "�����к���������·����������·���ᴦ�·�"); strcpy(M.site[5].name, "������"); strcpy(M.site[5].intro, "λ�ڱ��������������������֡��������ڴ�֡��������ϴ�֡������ű���ֽ��㴦"); strcpy(M.site[6].name, "�찲����"); strcpy(M.site[6].intro, "λ���й��������������������ֺ��ϳ��ֽ��ᴦ���DZ���������Ӫ���޹�˾��Ӫ�����ij�վ��Ҳ�DZ�������1���ߵ��м�վ"); strcpy(M.site[7].name, "������"); strcpy(M.site[7].intro, "λ���й������ж������볯�������紦���������·����DZ���������Ӫ���޹�˾��Ӫ�ij�վ��Ҳ�DZ�������1���ߡ���������2���ߵĻ���վ"); strcpy(M.site[8].name, "������"); strcpy(M.site[8].intro, "λ���й������г����������������붫����·����ڵ��·�"); strcpy(M.site[9].name, "��¥���"); strcpy(M.site[9].intro, "�DZ�������2�����뱱������8���ߵĻ���վ,λ�ڱ������������붫�������紦,�����������-��ʤ�Ŷ������ɹ�¥���-�ɹ�¥���ֽ��ᴦ"); strcpy(M.site[10].name, "Ӻ�͹�"); strcpy(M.site[10].intro, "λ�ڱ����ж����������������Ŷ������Ӻ�͹���֡���ƽ�����ֽ��㴦"); strcpy(M.site[11].name, "������"); strcpy(M.site[11].intro, "λ�ڱ����ж������볯�������紦,����������-�������ڴ���볯�����ϴ��-�����ű���ֽ��㴦"); strcpy(M.site[12].name, "����վ"); strcpy(M.site[12].intro, "λ���й������ж��������ڡ�����վ���㳡�·�"); strcpy(M.site[13].name, "������"); strcpy(M.site[13].intro, "��������2���ߺͱ�������5�����ڴ˽��㣬λ�ڱ����ж�����ǰ�Ŷ������������ڴ�ֽ����"); strcpy(M.site[14].name, "��ƽ��"); strcpy(M.site[14].intro, "λ�ڱ��������������»��֣����»�����ǰ������֣������Ŷ���ֽ��㴦"); strcpy(M.site[15].name, "������"); strcpy(M.site[15].intro, "λ���й����������������DZ�������2���ߺͱ�������4���ߵĻ���վ"); strcpy(M.site[16].name, "������"); strcpy(M.site[16].intro, "������վ�DZ�������2���ߵ�һ����վ,λ�ڱ���������������������֡������ֽ��㴦"); strcpy(M.site[17].name, "��ֱ��"); strcpy(M.site[17].intro, "λ�ڱ�������������ֱ�����·�"); strcpy(M.site[18].name, "Բ��԰"); strcpy(M.site[18].intro, "λ�ڱ����к������廪��·"); strcpy(M.site[19].name, "������ѧ����"); strcpy(M.site[19].intro, "λ���й������к���������"); strcpy(M.site[20].name, "�йش�"); strcpy(M.site[20].intro, "λ�ڱ����к������йش�һ���ϲ�"); strcpy(M.site[21].name, "������ׯ"); strcpy(M.site[21].intro, "�DZ�������4���ߺͱ�������10���ߵĻ���վ"); strcpy(M.site[22].name, "�����ѧ"); strcpy(M.site[22].intro, "λ�ڱ����к�������ͨ��"); strcpy(M.site[23].name, "����ͼ���"); strcpy(M.site[23].intro, "����ͼ���վλ�ڹ���ͼ��ݵ��ϲ����"); strcpy(M.site[24].name, "����԰"); strcpy(M.site[24].intro, "λ�ڱ�������ֱ������"); strcpy(M.site[25].name, "������վ"); strcpy(M.site[25].intro, "λ���й������з�̨����·������վ�·�"); strcpy(M.site[26].name, "������"); strcpy(M.site[26].intro, "λ���й������д���������"); strcpy(M.site[27].name, "����ҽҩ����"); strcpy(M.site[27].intro, "�DZ�������4���ߵ�һ����վ,λ�ڱ����д�������Դ���������·�����ϲ�"); strcpy(M.site[28].name, "��̳����"); strcpy(M.site[28].intro, "λ���й������ж�����"); strcpy(M.site[29].name, "��ͨԷ"); strcpy(M.site[29].intro, "�DZ�������5���ߵ�һ����վ��Ҳ�DZ�����һ��ͨ���������ӵĵ�����վ��λ�ڱ����в�ƽ������·��̫ƽׯ�ж��ֽ��㴦����"); strcpy(M.site[30].name, "��ͨԷ��"); strcpy(M.site[30].intro, "λ�ڱ����в�ƽ����ͨԷ����̫ƽׯ�����Ա�400�״�"); for (i = 1; i <= ALLNameNum; i++) { for (j = 1; j <= ALLNameNum; j++) { M.length[i][j] = INF; } } for (i = 1; i <= ALLNameNum; i++) M.length[i][i] = 0; M.length[1][2] = M.length[2][1] = 30; M.length[1][3] = M.length[3][1] = 30; M.length[2][3] = M.length[3][2] = 90; M.length[2][4] = M.length[4][2] = 70; M.length[3][5] = M.length[5][3] = 50; M.length[3][6] = M.length[6][3] = 50; M.length[4][5] = M.length[5][4] = 50; M.length[4][7] = M.length[7][4] = 100; M.length[5][6] = M.length[6][5] = 30; M.length[6][7] = M.length[7][6] = 110; M.length[6][10] = M.length[10][6] = 20; M.length[7][8] = M.length[8][7] = 30; M.length[7][9] = M.length[9][7] = 30; M.length[7][10] = M.length[10][7] = 30; M.length[8][9] = M.length[9][8] = 30; M.length[9][10] = M.length[10][9] = 60; M.length[9][11] = M.length[11][9] = 40; M.length[10][11] = M.length[11][10] = 40; M.length[11][12] = M.length[12][11] = 100; M.length[11][13] = M.length[13][11] = 50; M.length[12][13] = M.length[13][12] = 60; M.length[12][15] = M.length[15][12] = 30; M.length[12][17] = M.length[17][12] = 170; M.length[13][14] = M.length[14][13] = 70; M.length[13][15] = M.length[15][13] = 30; M.length[13][16] = M.length[16][13] = 50; M.length[14][16] = M.length[16][14] = 50; M.length[15][16] = M.length[16][15] = 20; M.length[16][17] = M.length[17][16] = 30; M.length[17][18] = M.length[18][17] = 60; M.length[17][19] = M.length[19][17] = 30; M.length[17][20] = M.length[20][17] = 170; M.length[18][20] = M.length[20][18] = 70; M.length[19][21] = M.length[21][19] = 30; M.length[20][21] = M.length[21][20] = 50; M.length[21][22] = M.length[22][21] = 50; M.length[21][24] = M.length[24][21] = 20; M.length[22][23] = M.length[23][22] = 30; M.length[23][25] = M.length[25][23] = 60; M.length[23][26] = M.length[26][23] = 30; M.length[24][25] = M.length[25][24] = 170; M.length[25][27] = M.length[27][25] = 70; M.length[26][27] = M.length[27][26] = 30; M.length[27][28] = M.length[28][27] = 50; M.length[27][29] = M.length[29][27] = 50; M.length[28][29] = M.length[29][28] = 20; M.length[29][30] = M.length[30][29] = 30; N = 30; } void queryAllSite() { int t; printf("���еص����£�\n"); for (t = 1; t <= N; t++) { printf("��ţ� %d\n �ص㣺%s\n ���ܣ�%s\n", t, M.site[t].name, M.site[t].intro); } printf("\n���������"); getch(); } void querySite() { int a; printf("������Ҫ��ѯ�ĵص����ǣ�"); scanf("%d", &a); if (a > N) printf("��ѯ�ĵص㲻���ڣ���ѯʧ�ܣ�"); else printf("��ţ�%d\n �ص㣺%s\n ���ܣ�%s\n", a, M.site[a].name, M.site[a].intro); printf("\n����������أ�"); getch(); } void dijkstraAllSite() { int v0; printf("�������ѯ�ĵص㣺"); scanf("%d", &v0); bool flag[ALLNameNum]; //v��ʾ��һ���ڵ㣬k��ʾ�����ڵ� int i, k, j, v, min, x; for (v = 1; v <= N; v++) { flag[v]=0; d[v] = M.length[v0][v]; if (d[v] < INF && d[v] != 0) p[v] = v0; else p[v] = -1; } flag[v0] = 1; d[v0] = 0;//ԭ����� for (i = 2; i <= N; i++) { min = INF; for (k = 1; k <= N; ++k) if (!flag[k] && d[k] < min) {//û�б���ѯ�����Ҿ���С����Сֵ����� v = k; min = d[k]; } if (min == INF) return; flag[v] = 1; for (k = 1; k <= N; ++k) if (!flag[k] && (min + M.length[v][k] < d[k])) { d[k] = min + M.length[v][k];//��k�ľ��� p[k] = v;//k�ڵ����һ���ڵ���v } } } void printAllSite() { int st[ALLNameNum], i, pre, top = -1; for (i = 1; i <= N; i++) { printf("\n����ص�%2d���ܾ���Ϊ: %5d , ����·��Ϊ:", i, d[i]); st[++top] = i; pre = p[i]; while (pre != -1) { st[++top] = pre; pre = p[pre]; } while (top > 0) { printf("%d", st[top--]); if (top > 0) printf("--->"); } } getch(); } void dijkstraTwoSite() { int v0; printf("��������ʼ�ص�����Ӧ�ı�ţ�"); scanf("%d", &v0); bool flag[ALLNameNum]; int i, k, j, v, min, x; for (v = 1; v <= N; v++) { flag[v] = 0; d[v] = M.length[v0][v]; if (d[v] < INF && d[v] != 0) p[v] = v0; else p[v] = -1; } flag[v0] = 1; d[v0] = 0; for (i = 2; i <= N; i++) { min = INF; for (k = 1; k <= N; ++k) if (!flag[k] && d[k] < min) { v = k; min = d[k]; } if (min == INF) return; flag[v] = 1; for (k = 1; k <= N; ++k) if (!flag[k] && (min + M.length[v][k] < d[k])) { d[k] = min + M.length[v][k]; p[k] = v; } } } void printTwoSite() { int y; printf("\n������Ŀ�ĵص�����Ӧ�ı�ţ�"); scanf("%d", &y); int st[ALLNameNum], i, pre, top = -1; for (i = 1; i <= N; i++) { if (i == y) printf("\n�ܾ�����: %5d , ����·��Ϊ:", d[i]); st[++top] = i; pre = p[i]; while (pre != -1) { st[++top] = pre; pre = p[pre]; } while (top > 0) { if (i == y) { printf("%d", st[top--]); if (top > 0) printf("--->"); } else top--; } } getch(); } main() { init(); int x; while (1) { printf("**********************************************************************\n"); printf("* ��ӭʹ�ñ�������·�߹滮ϵͳ *\n"); printf("**********************************************************************\n"); printf("\n 0���˳����� "); printf("\n 1���������վ�㼰�����"); printf("\n 2����ѯijһ����վ�㼰�����"); printf("\n 3����ѯijһվ�㵽��������վ������·��"); printf("\n 4����ѯij����վ��֮������·�� "); printf("\n*******************************************************************"); printf("�ص��Ŷ�Ӧ��\n"); printf(" 1.ƻ��԰ 2.�ų� 3.�˽�����԰ 4.������ 5.������ 6.�찲���� 7.������ 8.������ 9.��¥��� 10.Ӻ�͹�\n"); printf("11.������ 12.����վ 13.������ 14.��ƽ�� 15.������ 16.������ 17.��ֱ�� 18.Բ��԰ 19.������ѧ���� 20.�йش� 21.������ׯ 22.�����ѧ 23.����ͼ��� 24.����԰ 25.������վ 26.������ 27.����ҽҩ���� 28��̳���� 29.��ͨԷ 30.��ͨԷ��\n "); printf("\n������ѡ�"); scanf("%d", &x); if (x == 0) break; else switch (x) { case 1:queryAllSite(); break; case 2:querySite(); break; case 3:dijkstraAllSite(); printAllSite(); break; case 4:dijkstraAllSite(); printTwoSite(); break; } system("cls"); } }