给i取值,在终端输入的是0,但是调试的时候查看变量显示i为7
#include
#include
#define Maxvernum 100//定义最大顶点数
typedef struct {
char vexs[Maxvernum];//顶点表
int edges[Maxvernum][Maxvernum];//林结局很,可以看作边表
int n,e;//图中的顶点数和边数
}AMGraph;//用邻接矩阵表示图的类型
//建立邻接矩阵
void create_AM(AMGraph *G){
int i,j,k;
char a;
printf("请输入图的节点数和边数:");
scanf("%d%d",&G->n,&G->e);//输入顶点数和边数
printf("请输入节点信息:");
for(i=0;in;i++){
scanf("%c",&a);
G->vexs[i]=a;//读入顶点信息,建立顶点表
}
for(i=0;in;i++){
for(j=0;jn;j++){
G->edges[i][j]=0;//初始化邻接矩阵
}
}
for(k=0;ke;k++){
printf("请输入边的两个顶点:");
scanf("%d%d",&i,&j);//输入边的顶点序号
G->edges[i][j]=1;
G->edges[j][i]=1;//若为无向图,矩阵为对称矩阵,若为有向图,删除该语句
}
for(i=0;in;i++){
for(j=0;jn;j++){
printf("%d",G->edges[i][j]);//初始化邻接矩阵
}
printf("\n");
}
}
//定义标志向量作为全局变量
bool visited[Maxvernum];
//DFS:深度优先遍历的递归算法
void DFSM(AMGraph *G,int i){
//从vi开始对邻接矩阵表示的图进行深度优先遍历
int j;
printf("%c",G->vexs[i]);//访问顶点
visited[i]=true;//设置为true表示已经访问过了
for(j=0;jn;j++){
if((G->edges[i][j]==1)&& (!visited[j])){
DFSM(G,j);
}
}
}
void DFS(AMGraph *G){
int i;
for(int a=0;an;a++){
visited[a]=false;//初始化邻接矩阵
}
for(i=0;in;i++){
if(!visited[i]){
DFSM(G,i);
}
}
}
//BFS:广度优先遍历的递归算法
void BFS_AM(AMGraph *G,int k){
int i,j,r=0,f=0;
int cq[Maxvernum];//定义队列
for(i=0;in;i++){
visited[i]=false;//标志向量初始化
}
for(i=0;in;i++){
cq[i]=-1;//队列初始化
}
printf("%c",G->vexs[k]);//访问原点vk
visited[k]=true;
cq[r]=k;//vk已访问,将vk入队
while(cq[f]!=-1){
i=cq[f];f=f+1;
for(j=0;jn;j++){
if(G->edges[i][j]==1 && !visited[j]){
printf("%c",G->vexs[j]);//访问Vj
visited[j]=true;
r=r+1;cq[r]=j;
}
}
}
}
int main(){
int i;
AMGraph *G=(AMGraph *)malloc(sizeof(AMGraph));
create_AM(G);
printf("\n");
DFS(G);
printf("\n");
BFS_AM(G,3);
}
断点调试到这一行的 i 值还没有被录入的,需要执行完 scanf 这一行才会对 i 赋值,这个时候再去看 i 的值。
可以在下一行设置一个断点