for (int i = 0; i < (graph.vexnum); i++) { graph.vexs[i] = city[i]; }
时间: 2024-04-27 15:23:54 浏览: 10
这段代码是CreatGraph函数的一部分,它的作用是将指针city指向的City数组中的元素复制到graph中的vexs数组中。具体来说,这个for循环遍历了vexs数组中的每一个元素,然后将对应位置的city数组中的元素赋值给vexs数组中的相应位置。这样,graph中的vexs数组就存储了所有的城市信息。
相关问题
for (int i = 0; i < (graph.vexnum); i++) { graph.vexs[i] = city[i]; } //初始化二维矩阵 for (i = 0; i < (graph.vexnum); i++) { for (j = 0; j < (graph.vexnum); j++) { graph.arcs[i][j].cost = INFINITY; graph.arcs[i][j].time = INFINITY; } } //添加弧数据 for (int i = 0; i < graph.arcnum; i++) { int sta = LocateVex(route[i].start_city, city); int end = LocateVex(route[i].end_city, city); graph.arcs[sta][end].cost = route[i].cost; graph.arcs[sta][end].time = route[i].time; } }
这段代码是创建图的函数的续部,其中 Graph 是一个图的数据结构,包括节点和边,City 是一个城市信息的结构体,Route 是一条路线信息的结构体。具体来讲,这段代码的作用是:
1. 将城市数组 city 中的每个城市信息复制到图的节点数组 graph.vexs 中对应的位置上。
2. 初始化图的邻接矩阵 graph.arcs,将每个边的长度和时间都设置为无穷大(即表示不可达)。
3. 遍历路线数组 route,对于每条路线,根据其起点和终点在城市数组 city 中的索引,将该路线的长度和时间分别存储在图的邻接矩阵 graph.arcs 中对应的位置上。
需要注意的是,这段代码中使用了 LocateVex 函数来查找城市在城市数组 city 中的索引。同时使用了 INFINITY 宏定义来表示边的长度和时间为无穷大。
删除下列代码中的注释#include <iostream> #define MVNum 100//最大顶点数 using namespace std; typedef struct{ int vexs[MVNum];//顶点表 int arcs[MVNum][MVNum];//邻接矩阵 int vexnum,arcnum; }AMGraph; void Create_V(AMGraph &G,int name){ int pos=++G.vexnum; G.vexs[pos-1]=name;//存入点名 for(int i=1;i<=pos;i++){//点所在的行列清零 G.arcs[i-1][pos-1]=0; G.arcs[pos-1][i-1]=0; } } void Create_Arc(AMGraph &G,int h,int k){ G.arcs[h-1][k-1]=G.arcs[k-1][h-1]=1;//点与对称点都归1 } void Out_Graph(AMGraph G){ cout<<"0 ";//开头输出0 for(int i=1;i<G.vexnum;i++) cout<<G.vexs[i-1]<<" ";//输出所有点名 cout<<G.vexs[G.vexnum-1]<<endl; for(int i=1;i<=G.vexnum;i++){//输出所有弧 cout<<G.vexs[i-1]<<" "; for(int j=1;j<G.vexnum;j++){ cout<<G.arcs[i-1][j-1]<<" "; } cout<<G.arcs[i-1][G.vexnum-1]<<endl; } } void Calculate(int m,int n){ AMGraph G; G.vexnum=G.arcnum=0; for(int i=1;i<=m;i++) Create_V(G,i);//构造前n个顶点 for(int i=1;i<=n;i++){//构造n条边 int h,k; cin>>h>>k;//输入左右顶点 Create_Arc(G,h,k);//构造边 } int new_point;//新顶点 cin>>new_point; Create_V(G,new_point);//新顶点入图 Out_Graph(G);//输出图 } int main(){ int m,n; while(cin>>m>>n&&m!=0&&n!=0){//每次处理一行数据 Calculate(m,n); } return 0; }
以下是删除了注释的代码:
#include <iostream>
#define MVNum 100
using namespace std;
typedef struct{
int vexs[MVNum];
int arcs[MVNum][MVNum];
int vexnum,arcnum;
}AMGraph;
void Create_V(AMGraph &G,int name){
int pos=++G.vexnum;
G.vexs[pos-1]=name;
for(int i=1;i<=pos;i++){
G.arcs[i-1][pos-1]=0;
G.arcs[pos-1][i-1]=0;
}
}
void Create_Arc(AMGraph &G,int h,int k){
G.arcs[h-1][k-1]=G.arcs[k-1][h-1]=1;
}
void Out_Graph(AMGraph G){
cout<<"0 ";
for(int i=1;i<G.vexnum;i++) cout<<G.vexs[i-1]<<" ";
cout<<G.vexs[G.vexnum-1]<<endl;
for(int i=1;i<=G.vexnum;i++){
cout<<G.vexs[i-1]<<" ";
for(int j=1;j<G.vexnum;j++){
cout<<G.arcs[i-1][j-1]<<" ";
}
cout<<G.arcs[i-1][G.vexnum-1]<<endl;
}
}
void Calculate(int m,int n){
AMGraph G;
G.vexnum=G.arcnum=0;
for(int i=1;i<=m;i++) Create_V(G,i);
for(int i=1;i<=n;i++){
int h,k;
cin>>h>>k;
Create_Arc(G,h,k);
}
int new_point;
cin>>new_point;
Create_V(G,new_point);
Out_Graph(G);
}
int main(){
int m,n;
while(cin>>m>>n&&m!=0&&n!=0){
Calculate(m,n);
}
return 0;
}