- /*****************************************************************************
- 15. 已知6个城市,用c[i,j]表示从i城市到城市j是否有单向的直达汽车
- (1=<i〈=6,1〈=j〈=6), c[i,j]=1 表示城市i到城市j有单向直达汽
- 车; 否则 c[i,j]=0. 试编制程序,对于给出的城市代号i,打印出从该城市出
- 发乘车(包括转车)可以到达的所有城市。
- ******************************************************************************/
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- #include <queue>
- using namespace std;
- #define N 6
- //城市是否被访问
- static int access[N];
- //城市交通图
- static int map[N][N];
- void PrintMap()
- {
- int i,j;
- for(i=0; i<N; i++)
- {
- for(j=0; j<N; j++)
- printf("%3d",map[i][j]);
- printf("/n");
- }
- }
- void PrintAttach(int m)
- {
- int i;
- for(i=0; i<N; i++)
- {
- if(i!=m && access[i])
- printf("%3d",i);
- }
- printf("/n");
- }
- void main()
- {
- int m;// 城市代号
- int i,j;
- queue <int> q;
- srand(time(0));
- for(i=0; i<N; i++)
- {
- for(j=0; j<N; j++)
- map[i][j] = rand()%2;
- }
- PrintMap();
- printf("请选择一个城市,代号为m(0<=m<=5):");
- scanf("%d",&m);
- if(m<0 || m>5)
- {
- printf("代号m不符合要求!");
- return;
- }
- access[m] = 1;
- q.push(m);
- while(!q.empty())
- {
- int k;
- int cur;
- cur = q.front();
- q.pop();
- for(k=0; k<N; k++)
- {
- if(access[k] == 0 && map[cur][k] == 1)
- {
- access[k] = 1;
- q.push(k);
- }
- }
- }
- PrintAttach(m);
- }
练习15
最新推荐文章于 2020-10-28 19:54:03 发布