#include<bits/stdc++.h>
using namespace std;
struct Node
{
int num;
int next=0;
}nodez[100000],noden[100000];
int cnt,vnum,enumm,flag;
void CreateMap()
{
cout<<"请输入总共点数:";cin>>vnum;
cnt=vnum;
cout<<"请输入总边数:";cin>>enumm;
cout<<"请输入图的类型,0为有向图,1为无向图:";cin>>flag;
cout<<"请依次输入每条边的两个顶点:"<<endl;
int v1,v2;
for(int i=1;i<=vnum;i++) {nodez[i].num=i;noden[i].num=i;}
if(flag==0)
{
for(int i=1;i<=enumm;i++)
{
cin>>v1>>v2;
nodez[++cnt].num=v2;nodez[cnt].next=nodez[v1].next;
nodez[v1].next=cnt;
noden[++cnt].num=v1;noden[cnt].next=noden[v2].next;
noden[v2].next=cnt;
}
}
else
{
for(int i=1;i<=enumm;i++)
{
cin>>v1>>v2;
nodez[++cnt].num=v2;nodez[cnt].next=nodez[v1].next;
nodez[v1].next=cnt;
nodez[++cnt].num=v1;nodez[cnt].next=nodez[v2].next;
nodez[v2].next=cnt;
}
}
}
void Print()
{
for(int i=1;i<=vnum;i++)
{
int now=i;
cout<<nodez[now].num;
now=nodez[now].next;
while(now)
{
cout<<"->";
cout<<nodez[now].num;
now=nodez[now].next;
}
cout<<endl;
}
}
bool check()
{
cout<<"请输入需要判断的边是否存在的两个顶点:";
int v1,v2;cin>>v1>>v2;
int now=nodez[v1].next;
while(now)
{
if(nodez[now].num==v2) return 1;
now=nodez[now].next;
}
return 0;
}
void du()
{
int v;
cout<<"请输入查询点:";cin>>v;
if(flag==0)
{
int now=nodez[v].next;int tot=0;
while(now)
{
tot++;
now=nodez[now].next;
}
cout<<"第"<<v<<"个结点的入度为"<<tot<<" ";
now=noden[v].next;tot=0;
while(now)
{
tot++;
now=noden[now].next;
}
cout<<"出度为"<<tot<<endl;
}
else
{
int now=nodez[v].next;int tot=0;
while(now)
{
tot++;
now=nodez[now].next;
}
cout<<"第"<<v<<"个结点的入度和出度均为"<<tot<<endl;
}
}
void menu()
{
cout<<"-------------------------"<<endl;
cout<<"1.判断边是否存在"<<endl;
cout<<"2.顶点度数"<<endl;
cout<<"3.退出"<<endl;
cout<<"-------------------------"<<endl;
}
int main()
{
CreateMap();
while(1)
{
menu();
int choice;cin>>choice;
switch(choice)
{
case 1:if(check())cout<<"存在"<<endl;else cout<<"不存在"<<endl;;break;
case 2:du();break;
case 3:return 0;
}
}
}