在用邻接表存储的有向图G中(结点的编号从1到n),利用深度优先或广度优先算法判断结点i到j之间是否存在路径。是返回1,否返回0。

输入格式:

首先输入图的顶点个数m和边的数目n

接着输入n条边,用i,j的格式输入。

之后输入顶点i和j

输出格式:

输出i到j是否存在路径,是则输出1,否则输出0。

输入样例:

在这里给出一组输入。例如:

5 4
1,2
2,3
2,4
2,5
3 5

输出样例:

在这里给出相应的输出。例如:

0

#include <bits/stdc++.h>
#define MVNum 100
using namespace std;
bool visited[MVNum];
int s[100];int top=0;int flag=0;
typedef struct ArcNode
{
    int adjvex;
    struct ArcNode *nextarc;
    
}ArcNode;
typedef struct VNode
{
    int data;
    ArcNode *firstarc;
}VNode,AdjList[MVNum];
typedef struct
{
    AdjList vertices;
    int vexnum,arcnum;
}ALGraph;

int LocateVex(ALGraph &G,int v)
{
    int flag=0;
    for(int i=0;i<G.vexnum;i++)
    {
        if(G.vertices[i].data==v)
        {
            flag=1;return i;
        }
    }
}
int CreateDG(ALGraph &G)
{
    int v1,v2;
    cin>>G.vexnum>>G.arcnum;
    for(int i=0;i<G.vexnum;i++)
    {
        G.vertices[i].data=i+1;
        G.vertices[i].firstarc=NULL;
    }
    for(int i=0;i<G.arcnum;i++)
    {
        cin>>v1;
        getchar();
        cin>>v2;
        //cout<<v1<<v2<<endl;
        int t1=LocateVex(G,v1);
        int t2=LocateVex(G,v2);
        ArcNode *p1,*p2;
        p1=new ArcNode;
        p1->adjvex=t2;
        p1->nextarc=G.vertices[t1].firstarc;
        G.vertices[t1].firstarc=p1;
        //p2=new ArcNode;
        //p2->adjvex=t1;
        //p2->nextarc=G.vertices[t2].firstarc;
        //G.vertices[t2].firstarc=p2;
    }
    return 1;
}

void DFS(ALGraph &G,int v,int ans)
{
    //cout<<v+1<<" ";
    top++;s[top]=v+1;
    if(v==ans){cout<<1<<endl;flag=1;}
    visited[v]=true;
    ArcNode* p=G.vertices[v].firstarc;
    int w;
    while(p!=NULL)
    {
        w=p->adjvex;
        if(!visited[w])DFS(G,w,ans);
        p=p->nextarc;
    }

}
void DFSbianli(ALGraph &G)
{
    for(int i=0;i<G.vexnum;i++)
    {
        visited[i]=false;
    }
    //for(int i=0;i<G.vexnum;i++)
        //if(!visited[i])DFS(G,i);
}
int main()
{
    ALGraph G;
    CreateDG(G);
    int v1,v2;
    cin>>v1>>v2;
    DFS(G,v1-1,v2-1);
    //cout<<s[top]<<endl;
    DFSbianli(G);
    if(flag==0) cout<<"0";
}

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐