「数据结构」判断图中任意两点是否存在路径
在用邻接表存储的有向图G中(结点的编号从1到n),利用深度优先或广度优先算法判断结点i到j之间是否存在路径。是返回1,否返回0。
·
在用邻接表存储的有向图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";
}

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