您的位置:首页 > 理论基础 > 数据结构算法

数据结构 — 7.有向图的创建及出入度的计算

2015-11-25 12:36 585 查看
【样例输入】
3 3
a b c
a b
a c
b c

【样例输出】
a 0 2
b 1 1
c 2 0

#include<iostream>

using namespace std;

#define MAX_VERTICES 50 /* 顶点最大数 */
#define ElementType char /* 元素的数据类型 */

typedef struct node {
ElementType vertex;
struct node *next;
}NodeType,*NodePointer;

typedef struct {
ElementType v;
NodePointer next;
}GPointer;

GPointer graph[MAX_VERTICES];

int vertices;
int edge;
void CreateGraph(){
ElementType ch,ch2;
NodePointer pnew, pnode;
pnew = pnode = NULL;

for(int i = 0; i<vertices; i++) {
cin>>graph[i].v;
graph[i].next = NULL;
}

for(int i = 0; i < edge; i++){
cin>>ch>>ch2;
pnew = new NodeType();
pnew->vertex = ch2;
pnew->next = NULL;

for(int j = 0; j<vertices; j++){
if(graph[j].v == ch)
{
if(graph[j].next == NULL) {
graph[j].next = pnew;
continue;
}
pnode = graph[j].next;
while(pnode->next != NULL){
pnode = pnode->next;
}
pnode->next = pnew;
}
}
}
}

int outdegree(int n){
int outd = 0;
NodePointer np = graph
.next;
while(graph
.next != NULL){
if(np->next == NULL) {
outd++;
break;
}else{
outd++;
np = np->next;
}
}
return outd;
}

int indegree(int n){
int ind = 0;
for(int i = 0;i<vertices;i++){
NodePointer np = graph[i].next;
while(graph[i].next != NULL && np != NULL){
if(np->vertex == graph
.v){
ind++;
break;
}
np = np->next;
}
}
return ind;
}

int main(){

// cout<<"输入"<<endl;
cin>>vertices>>edge;

CreateGraph();

for(int i = 0; i<vertices ; i++) {
cout<<graph[i].v<<" "<<indegree(i)<<" "<<outdegree(i)<<endl;
}
return 0;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: