查找算法无法输出是什么问题?是不是创造图有问题


#include<stdio.h>
#include<stdlib.h>
#define MAX 100
typedef int DataType;
int visited[MAX+1];
typedef struct node
{
    int adjvex;
    struct node *next;
    int info;
} EdgeNode;
typedef struct
{
    int vertex;
    EdgeNode *firstedge;
} VertexNode;
typedef VertexNode AdjList[MAX+1];
typedef struct
{
    AdjList adjlist;
    int n,e;
} ALGraph;
typedef struct
{
    DataType Qdata[MAX+1];
    int front,rear;
} SeqQueue;
void CreatesAdjList(ALGraph *g)
{
    int n,m;
    printf("请输入顶点数和边数:");
    scanf("%d%d",&n,&m);
    g->n=n;
    g->e=m;
    EdgeNode *ptr1,*ptr2;
    int k,v1,v2;
    printf("请输入顶点元素:\n");
    for(k=1; k<=g->n; k++)
    {
        getchar();
        scanf("%d",&(g->adjlist[k].vertex));
        g->adjlist[k].firstedge=NULL;
    }
    printf("请输入一条边的起终点对应的序号与权值:\n");
    for(k=1; k<=g->e; k++)
    {
        //printf("请输入一条边的起终点对应的序号:\n");
        scanf("%d%d",&v1,&v2);
        ptr1=(EdgeNode*)malloc(sizeof(EdgeNode));
        ptr1->adjvex=v2;
        int num;
        //printf("请输入这条边的权值:\n");
        scanf("%d",&num);
        ptr1->info=num;
        ptr1->next=g->adjlist[v1].firstedge;
        g->adjlist[v1].firstedge=ptr1;
        ptr2=(EdgeNode*)malloc(sizeof(EdgeNode));
        ptr2->adjvex=v1;
        ptr2->info=num;
        ptr2->next=g->adjlist[v2].firstedge;
        g->adjlist[v2].firstedge=ptr2;
    }
}


void Search(ALGraph *g)
{
    int x,y=0;
    printf("请输入你需要查找节点的名称:\n");
    scanf("%d",&x);
    for(int i=1; i<=g->n; i++)
        visited[i]=0;
    for(int i=1; i<g->n; i++)
    {
        if(!visited[i])
        {
            SFS(g,i,x);
            y++;
        }
    }
    if(y==0)
        printf("\n图没有这个节点!\n");


}

void SFS(ALGraph *g,int i,int x)
{
    visited[i]=1;
    EdgeNode *p;
    if(g->adjlist[i].vertex==x)
    {
        printf("***%3d",g->adjlist[i].vertex);
        return;
    }
    p=g->adjlist[i].firstedge;
    while(p!=NULL)
    {
        if(visited[p->adjvex]!=1)
            DFS(g,p->adjvex);
        p=p->next;
    }
}

void DFS(ALGraph g,int i)
{
    visited[i]=1;
    EdgeNode *p;
    printf("%3d",g.adjlist[i].vertex);
    p=g.adjlist[i].firstedge;
    while(p!=NULL)
    {
        if(visited[p->adjvex]!=1)
            DFS(g,p->adjvex);
        p=p->next;
    }
}

void DFSTraverse(ALGraph g)
{
    int i;
    for(i=1; i<=g.n; i++)
        visited[i]=0;
    for(i=1; i<=g.n; i++)
        if(!visited[i])
            DFS(g,i);
}

void InitQueue(SeqQueue *q)
{
    q->front=q->rear=0;
}
int QueueEmpty(SeqQueue *q)
{
    if(q->front==q->rear)
        return 1;
    else
        return 0;
}
int EnQueue(SeqQueue *q,DataType x)
{
    if(q->rear==MAX+1)
    {
        printf("队列已满!\n");
        return 0;
    }
    else
    {
        q->Qdata[q->rear]=x;
        q->rear++;
        return 1;
    }
}
int DeQueue(SeqQueue *q,DataType *x)
{
    if(q->rear==q->front)
    {
        printf("队列已空!\n");
        return 0;
    }
    else
    {
        *x=q->Qdata[q->front];
        q->front++;
        return 1;
    }
}
int GetQueue(SeqQueue *q,DataType *x)
{
    if(q->rear==q->front)
    {
        printf("队列已空!\n");
        return 0;
    }
    else
    {
        *x=q->Qdata[q->front];
        return 1;
    }
}
void BFS(ALGraph *g,int v)
{
    SeqQueue q;
    EdgeNode *p;
    InitQueue(&q);
    visited[v]=1;
    printf("%3d",g->adjlist[v].vertex);
    EnQueue(&q,v);
    while(!QueueEmpty(&q))
    {
        DeQueue(&q,&v);
        p=g->adjlist[v].firstedge;
        while(p!=NULL)
        {
            if(!visited[p->adjvex])
            {
                int x;
                x=p->adjvex;
                visited[p->adjvex]=1;
                printf("%3d",g->adjlist[x].vertex);
                EnQueue(&q,p->adjvex);
            }
            p=p->next;

        }
    }
}

int main()
{
    ALGraph *g;
    g=(ALGraph*)malloc(sizeof(ALGraph));
    CreatesAdjList(g);
    printf("\nDFS的遍历结果:\n");
    DFSTraverse(*g);

    printf("\nBFS的遍历结果:\n");
    for(int x=0; x<=g->n; x++)
        visited[x]=0;
    for(int x=1; x<=g->n; x++)
        if(visited[x]==0)
        {
            BFS(g,x);
        }
    printf("\n");
    Search(g);
    printf("\n");
    system("pause");
    return 0;

}

eg
这个节点为7,边为12
输入节点 1 2 3 4 5 6 7
节点和边的权值

```
1

2

1

1
4
1
1
3
1
1
6
1
2
4
1
2
7
1
2
5
1
3
6
1
4
6
1
4
7
1
6
7
1
5
7
1```