D[v] = G.arcs[v0][v];这句代码报错,如何定义D
时间: 2023-09-20 10:08:12 浏览: 22
在编程中,定义变量需要明确变量的数据类型和初始值。对于这句代码D[v] = G.arcs[v0][v];,需要先定义D的数据类型和大小,才能使用下标v访问其中的元素。假设D是一个整型数组,可以这样定义:
```
int D[MAXSIZE]; // 定义一个整型数组D,大小为MAXSIZE,MAXSIZE根据实际情况进行设置
D[v] = G.arcs[v0][v]; // 将G的邻接矩阵G.arcs中v0行v列的值赋给D数组下标为v的元素
```
其中,MAXSIZE可以根据实际需要进行修改。需要注意的是,下标v必须在D数组的有效范围内,否则会出现越界访问的错误。同时,需要保证G.arcs中v0行v列的值是存在的,否则也会出现访问非法内存的错误。
相关问题
void PrintfAMGraph(AMGraph G) { G.vexnum=22; G.arcnum=29; for(int i=1;i<=G.vexnum;i++) { for(int j=1;j<=G.vexnum;j++) { if(i=j) G.arcs[i][j]=0; else G.arcs[i][j]=MaxInt; } } G.arcs[1][2]=45;G.arcs[1][3]=50; G.arcs[2][4]=200; G.arcs[3][5]=100; G.arcs[4][6]=250; G.arcs[5][6]=30; G.arcs[6][7]=100;G.arcs[6][8]=80;G.arcs[6][9]=180; G.arcs[7][8]=100; G.arcs[9][10]=300;G.arcs[9][11]=170;G.arcs[9][17]=320; G.arcs[10][12]=120; G.arcs[11][12]=250;G.arcs[11][13]=80; G.arcs[12][16]=220; G.arcs[13][14]=100;G.arcs[13][15]=150;G.arcs[13][16]=200;G.arcs[13][22]=550; G.arcs[14][15]=100;G.arcs[14][22]=480; G.arcs[15][16]=100; G.arcs[17][18]=50; G.arcs[18][19]=50; G.arcs[19][20]=50; G.arcs[20][21]=400; G.arcs[21][22]=300; for(int i=1;i<=22;i++) { for(int j=1;j<=22;j++) { G.arcs[j][i]=G.arcs[i][j]; } } for(int i=1;i<=G.vexnum;i++) { printf("v");printf("%2d",i);printf(":"); for(int j=1;j<=G.vexnum;j++) { if(G.arcs[i][j]==0) printf("%-5s","∞"); else printf("%-3d",G.arcs[i][j]); printf(" "); } printf("\n"); } } 这段代码怎么对齐输出?
你可以使用制表符 `\t` 来对齐输出。例如,可以在每次输出时使用 `printf("\t")` 来输出一个制表符,使输出向右对齐。以下是修改后的代码:
```
void PrintfAMGraph(AMGraph G) {
G.vexnum = 22;
G.arcnum = 29;
for (int i = 1; i <= G.vexnum; i++) {
for (int j = 1; j <= G.vexnum; j++) {
if (i = j)
G.arcs[i][j] = 0;
else
G.arcs[i][j] = MaxInt;
}
}
G.arcs[1][2] = 45;
G.arcs[1][3] = 50;
G.arcs[2][4] = 200;
G.arcs[3][5] = 100;
G.arcs[4][6] = 250;
G.arcs[5][6] = 30;
G.arcs[6][7] = 100;
G.arcs[6][8] = 80;
G.arcs[6][9] = 180;
G.arcs[7][8] = 100;
G.arcs[9][10] = 300;
G.arcs[9][11] = 170;
G.arcs[9][17] = 320;
G.arcs[10][12] = 120;
G.arcs[11][12] = 250;
G.arcs[11][13] = 80;
G.arcs[12][16] = 220;
G.arcs[13][14] = 100;
G.arcs[13][15] = 150;
G.arcs[13][16] = 200;
G.arcs[13][22] = 550;
G.arcs[14][15] = 100;
G.arcs[14][22] = 480;
G.arcs[15][16] = 100;
G.arcs[17][18] = 50;
G.arcs[18][19] = 50;
G.arcs[19][20] = 50;
G.arcs[20][21] = 400;
G.arcs[21][22] = 300;
for (int i = 1; i <= 22; i++) {
printf("v");
printf("%2d", i);
printf(":");
for (int j = 1; j <= G.vexnum; j++) {
if (G.arcs[i][j] == 0)
printf("%-5s", "∞");
else
printf("%-3d", G.arcs[i][j]);
printf("\t"); // 添加一个制表符
}
printf("\n");
}
}
```
这样可以使输出对齐,每个数字之间相隔一个制表符的位置。
int a,b; G.vexnum=n; G.arcnum=m; //memset(G.arcs,0,sizeof(G.arcs)); for(int i=0;i<G.vexnum;i++) for(int j=0;j<G.vexnum;j++) G.arcs[i][j]=0; for(int i=0;i<G.arcnum;i++) { a=bian[i].v1; b=bian[i].v2; G.arcs[a][b]=G.arcs[b][a]=1; } } void BFS(AMGraph G,int v,int Bf[]) { SqQueue Q; int I=0,u; InitQueue(Q); visited[v]=1; Bf[I++]=v; EnQueue(Q,v);下面的代码
好的,根据上下文信息,这里是一个无向图的邻接矩阵存储方式的BFS遍历算法。下面是完整的代码:
```c++
#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
const int MAXN = 100;
int visited[MAXN]; // 标记数组,记录每个顶点是否已被访问
typedef struct {
int v1, v2;
} Bian; // 边结构体
typedef struct {
int arcs[MAXN][MAXN]; // 存储邻接矩阵
int vexnum, arcnum; // 结点数和边数
} AMGraph; // 图结构体
void createGraph(AMGraph &G, Bian bian[], int n, int m) { // 建立无向图的邻接矩阵存储
int a, b;
G.vexnum = n;
G.arcnum = m;
memset(G.arcs, 0, sizeof(G.arcs)); // 初始化邻接矩阵
for (int i = 0; i < G.arcnum; i++) {
a = bian[i].v1;
b = bian[i].v2;
G.arcs[a][b] = G.arcs[b][a] = 1; // 无向图,边是双向的
}
}
void BFS(AMGraph G, int v, int Bf[]) { // 广度优先搜索
queue<int> Q;
int I = 0, u;
memset(visited, 0, sizeof(visited)); // 初始化visited数组
visited[v] = 1;
Bf[I++] = v;
Q.push(v);
while (!Q.empty()) {
u = Q.front();
Q.pop();
for (int i = 0; i < G.vexnum; i++) {
if (G.arcs[u][i] && !visited[i]) { // 如果u和v之间有边,且v未被访问过
visited[i] = 1;
Bf[I++] = i;
Q.push(i);
}
}
}
}
int main() {
int n, m; // n为结点数,m为边数
cin >> n >> m;
Bian bian[m];
int v; // 广搜起点
cin >> v;
int Bf[MAXN]; // 广搜序列
for (int i = 0; i < m; i++) {
cin >> bian[i].v1 >> bian[i].v2;
}
AMGraph G;
createGraph(G, bian, n, m); // 建立图
BFS(G, v, Bf);
for (int i = 0; i < n; i++) {
cout << Bf[i] << " ";
}
cout << endl;
return 0;
}
```
在该程序中,我们新加了一个结构体Bian,用于存储边的信息。在createGraph函数中,我们将边数组bian作为参数传入,遍历边数组,将每条边的两个顶点在邻接矩阵中标记为有边相连。最后,在主函数中输入结点数、边数、边的信息和广搜起点,建立图后调用BFS函数进行广搜遍历,并输出广搜序列。
阅读全文