美文网首页
[数据结构]图的广度优先遍历 解题报告

[数据结构]图的广度优先遍历 解题报告

作者: vouv | 来源:发表于2017-03-26 14:29 被阅读0次

Problem Description

本实验实现邻接表表示下无向图的广度优先遍历。
程序的输入是图的顶点序列和边序列(顶点序列以*为结束标志,边序列以-1,-1为结束标志)。程序的输出为图的邻接表和广度优先遍历序列。例如:

程序输入为:

a
b
c
d
e
f
*
0,1
0,4
1,4
1,5
2,3
2,5
3,5
-1,-1

程序的输出为:

the ALGraph is
a 4 1
b 5 4 0
c 5 3
d 5 2
e 1 0
f 3 2 1
the Breadth-First-Seacrh list:aebfdc

AcCode

//
//  main.cpp
//  图的广度优先遍历
//
//  Created by jetviper on 2017/3/26.
//  Copyright © 2017年 jetviper. All rights reserved.
//

#include <stdio.h>
#include<string.h>
int n=0,x,y;
struct {
    char nd[3];
    int bnum=0;
    int vsed =0;
    int linkto[100];
}node[100];
void search(int now){
    int temp[100],count=0;
    if(node[now].vsed==0){
        printf("%s",node[now].nd);
        node[now].vsed =1;
    }
    for(int i=node[now].bnum-1;i>=0;i--){
        if(node[node[now].linkto[i]].vsed==0){
            printf("%s",node[node[now].linkto[i]].nd);
            node[node[now].linkto[i]].vsed=1;
            temp[count]=node[now].linkto[i];
            count++;
        }
        
    }
    for(int i=0;i<count;i++)search(temp[i]);
    
}





int main() {
    
    while(1){
        scanf("%s",&node[n].nd);
        if(strcmp(node[n].nd,"*")==0){
            break;
        }
        n++;
    }
    while(1){
        scanf("%d,%d",&x,&y);
        if(x==-1)break;
        node[x].linkto[node[x].bnum] = y;
        node[x].bnum++;
        node[y].linkto[node[y].bnum] = x;
        node[y].bnum++;
    }
    
    printf("the ALGraph is\n");
    
    for(int i=0;i<n;i++){
        printf("%s",node[i].nd);
        for(int j=node[i].bnum-1;j>=0;j--){
            printf(" %d",node[i].linkto[j]);
        }
        printf("\n");
    }
    printf("the Breadth-First-Seacrh list:");
    for(int i=0;i<n;i++){
        if(node[i].vsed==0){
            search(i);
        }
    }
    printf("\n");
    
    
    
    
    return 0;
}

相关文章

网友评论

      本文标题:[数据结构]图的广度优先遍历 解题报告

      本文链接:https://www.haomeiwen.com/subject/doqkottx.html