yetang307

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
#include<iostream>
using namespace std;
struct arc {
    int subscript;
    arc* next;
};
struct point {
    char data;
    arc* first;
};
struct list {
    point p[100];
    int np, na;
};
bool visited[100];
int FirstAdjVex(list L, int f)
{
    if (L.p[f].first == NULL)return -1;
    return L.p[f].first->subscript;
}
int NextAdjVex(list L, int f, int w) {
    arc* p1 = L.p[f].first;
    while (p1 != NULL) {
        if (p1->subscript == w && p1->next != NULL)
            return p1->next->subscript;
        p1 = p1->next;
    }return -1;
}
void DFS(list L, int f) {
    cout << f<<" "; visited[f] = true;
    for (int w = FirstAdjVex(L,f); w >= 0; w = NextAdjVex(L, f, w))
        if (!visited[w])
            DFS(L, w);
}
int LocateVex(list L, char c){
    for (int i = 0; i < 100; i++) {
        if (L.p[i].data == c)return i;
    }return -1;
}
void Create(list& L,int &f){
    cin >> L.np >> L.na;
    for (int i = 0; i < L.np; i++){
        visited[i] = false;
        cin >> L.p[i].data;
        L.p[i].first = NULL;
    }
    for (int k = 0; k < L.na; k++)
    {
        char n, m;
        cin >> n >> m;
        int i = LocateVex(L, n), j = LocateVex(L, m);
        arc* p1 = new arc;
        p1->subscript = j;
        p1->next = L.p[i].first;
        L.p[i].first = p1;
    } char c; cin >> c;
    f = LocateVex(L, c);
}
int main()
{
    list L; int f;Create(L, f);
    if (L.np == 0 || L.np == 1 && L.na > 1)cout << "error";
    else {
        if(LocateVex(L,f)==-1||FirstAdjVex(L,f)==-1)cout<<"error";
        else DFS(L, f);
    }
}

 

posted on 2022-11-30 21:55  椰糖  阅读(88)  评论(0)    收藏  举报