diff --git a/代码123.cpp b/代码123.cpp new file mode 100644 index 0000000..588bcdb --- /dev/null +++ b/代码123.cpp @@ -0,0 +1,351 @@ +#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"); + } +}