求鄰接表節點的入度 出度

#include <iostream>
using namespace std;
int count1[100] = {0},count2[100] = {0};

typedef struct ArcNode{
	int adjvex;
	int weight;
	ArcNode *next;
}ArcNode;

typedef struct VertexNode{
	int vertex;
	ArcNode *firstarc;
}VertexNode,AdjList[100];

typedef struct GraphAdjList{
	AdjList adjlist;
	int vexnum;
	int arcnum;
}GraphAdjList;



void createGraphAdjList(GraphAdjList &G){
	cin >> G.vexnum >> G.arcnum;
	for(int i = 0; i < G.vexnum; i++){
		cin >> G.adjlist[i].vertex;
		G.adjlist[i].firstarc = NULL;
	}
	
	ArcNode *p;
	for(int k = 0; k < G.arcnum; k++){
		int i,j,w;
		cin >> i >> j >> w;
		p = new ArcNode;
		p->adjvex = j;
		p->weight = w;
		p->next = G.adjlist[i].firstarc; //頭插法 
		G.adjlist[i].firstarc = p;
	}
	
}

void printfGraphAdjList(GraphAdjList G){
		for(int i = 0; i < G.vexnum; i++){
			ArcNode *p = G.adjlist[i].firstarc;
			cout << G.adjlist[i].vertex << "\t";
			while(p){
				cout << p->adjvex << " " << p->weight << "\t";
				p = p->next;
			}
		
			cout << endl;
		}
		
		
}
int printfVertexNode(GraphAdjList G){
	for(int i = 0; i < G.vexnum; i++){
		ArcNode *p;
		p = G.adjlist[i].firstarc;
		while(p){
			count1[G.adjlist[i].vertex]++;
			count2[G.adjlist[p->adjvex].vertex]++;
			p = p->next;
		}
	}
	
	for(int i = 0; i < G.vexnum; i++){
		cout << G.adjlist[i].vertex << " " << count1[G.adjlist[i].vertex] << " " << count2[G.adjlist[i].vertex] << endl;
	}
}


int main(){
	GraphAdjList G;
	createGraphAdjList(G);
	printfGraphAdjList(G);
	printfVertexNode(G);
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章