图的ADT实现,两种存储结构,四种图,七种操作方式。
代码很烂,仅留作纪念。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod =1e9+7;
const int N=55;
typedef long long ll;
const int inf=INT_MAX-1;
char ch;
int kind;
int n;
int dd;
bool vis[N];
typedef struct graphA
{
char s[N];
int arcs[N][N];
int vernum;
};
struct node
{
int id;
int w;
bool operator<(node a)const
{
return w>a.w;
}
};
node d[N];
typedef struct arcnode
{
int adjvex;
int val;
arcnode *nextarc;
};
typedef struct
{
char data;
arcnode *link;
} adjlist[N];
typedef struct graph
{
int vexnum;
adjlist vertices;
};
int locadA(graphA g,char u)
{
for(int i=1; i<=g.vernum; i++)
{
if(g.s[i]==u)
{
return i;
}
}
return -1;
}
int locad(graph g,char u)
{
int i;
for(int i=1; i<=g.vexnum; i++)
{
if(g.vertices[i].data==u)
{
return i;
}
}
return -1;
}
void creatgraphA(graphA &g)
{
char tmp;
for(int i=1; i<=g.vernum; i++)
{
cin>>tmp;
g.s[i]=tmp;
}
for(int i=1; i<=g.vernum; i++)
{
for(int j=1; j<=g.vernum; j++)
{
g.arcs[i][j]=-1;
}
}
string t;
cin>>t;
while(t.size()>1)
{
char t1=t[0];
char t2=t[1];
int val=1;
if(kind==2||kind==4)
{
val=t[2]-'0';
}
int i=locadA(g,t1);
int j=locadA(g,t2);
if(kind==2||kind==4)
g.arcs[i][j]=val;
else
g.arcs[i][j]=1;
if(kind<=2)
{
if(kind==2)
g.arcs[j][i]=val;
else
g.arcs[j][i]=1;
}
cin>>t;
}
dd=t[0]-'0';
return ;
}
void degreeA(graphA g)
{
int sum1=0;
for(int i=1; i<=g.vernum; i++)
{
sum1=0;
for(int j=1; j<=g.vernum; j++)
{
if(g.arcs[i][j]>=1)
{
sum1++;
}
}
if(kind>2)
{
int sum2=0;
for(int k=1; k<=g.vernum; k++)
{
if(k!=i)
{
if(g.arcs[k][i]>=1)
{
sum2++;
}
}
}
cout<<"degree("<<g.s[i]<<")"<<sum1<<" "<<sum2<<endl;
}
else
{
cout<<"degree("<<g.s[i]<<")"<<"="<<sum1