0%

蓝桥杯-4

学习图的广搜~

BFS

邻接矩阵:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void BFS(MGragh g,int v){
queue <int> qu;
int visited[MAXV];
int w,i;
memset(visited,0,sizeof(visited));
printf("%3d",v);
visited[v]=1;
qu.push(v);

while(!qu.empty()){
w=qu.front();qu.pop();
for(i=0;i<g.n;i++)//中出顶点w相邻的顶点
if(g.edges[w][i]!=0&&g.edges[w][i]!=INF&&visited[i]==0){
printf("%3d",i);
visited[i]=1;
qu.push(i);
}
}
}

邻接表:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void BFS(ALGragh g,int v){
ArcNode *p;
queue<int> qu;
int visited[MAXV],w;
memset(visited,0,sizeof(visited));
printf("%3d",v);
visited[v]==1;
qu.push(v);

while(!qu.empty()){
w=qu.front();
qu.pop();
p=G->adjlist[w].firstarc;
while(p!=NULL){
if(visited[p->adjvex]==0){
printf("3d",p->adjvex);
visited[p->adjvex]=1;
qu.push(p->adjvex);
}
p=p->nextarc;
}
}
}

栗子:

  1. 假设图G采用邻接表存储,设计一个算法,求不带权无向连通图G中从顶点u到顶点v的一条最短路径。

这里注意要使用一个数组记录父节点便于路径回溯

  1. 最优配餐问题

遍历方式:广度优先遍历

​ 方案1:从每个分店搜索最近送餐客户(×)

​ 方案2:从每个客户搜索最近送餐分店(√)