有向图的创建、求度

#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 表示。

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值