#include<iostream>
using namespace std;
#define maxint 32767 // 表示没有路径的弧
#define mnum 100 // 最多定点数
typedef struct
{
char vexs[mnum];
int arcs[mnum][mnum];
int vexnum;
int arcnum;
}Graph;
int locate(Graph G, char a);
Graph Create();
void cal(Graph G,int in[mnum],int out[mnum] );
int main(void)
{
Graph G = Create();
int in[mnum] = {0};
int out[mnum] = {0};
cal(G,in,out);
for(int i = 1; i <= G.vexnum; i++)
{
cout<<G.vexs[i]<<' '<<out[i]<<' '<<in[i]<<" "<<out[i]+in[i]<<endl;
}
return 0;
}
int locate(Graph G, char a)
{
for (int i = 1; i <= G.vexnum; i++)
{
if (G.vexs[i] == a)
return i;
}
return 0;
}
Graph Create()
{
Graph G ;
cin>>G.vexnum>>G.arcnum; // 顶点和边数
for (int i = 1; i <= G.vexnum; i++)
{
cin>>G.vexs[i];
}
for (int i = 1; i <= G.vexnum; i++)
for (int j = 1; j <= G.vexnum; j++)
G.arcs[i][j] = maxint;
for (int i = 0; i < G.arcnum; i++)
{
string s = "";
cin>>s;
int k = locate(G, s[0]);
int f = locate(G, s[1]);
G.arcs[k][f] = 1;
}
return G;
}
void cal(Graph G,int in[mnum],int out[mnum] )
{
for( int i = 1; i <= G.vexnum; i++)
{
for( int j = 1; j <= G.vexnum; j++)
{
if( G.arcs[i][j] == 1)
{
out[i]++;
in[j]++;
}
}
}
}
我用的是 邻接矩阵创建的图,在算度的时候,A-->B,A的出度就是 B 的入度,不用查找 B 的下标,直接用 j 表示。