数据结构 — 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
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; }
相关文章推荐
- 线索二叉树的遍历(数据结构)
- 模式-算法-数据结构
- 《数据结构与算法》学习之入门篇
- 数据结构实验之图论六:村村通公路
- javascript数据结构之二叉搜索树实现方法
- javascript数据结构之双链表插入排序实例详解
- 数据结构实验之链表八:Farey序列
- 数据结构实验之串三:KMP应用
- 数据结构--红黑树(java)
- 【数据结构与算法】排序算法之六:快速排序
- 【数据结构与算法】排序算法之六:快速排序
- 【数据结构与算法】排序算法之五:归并排序
- 【数据结构与算法】排序算法之五:归并排序
- 数据结构?
- 转载:java集合类数据结构分析
- 树-C实现
- 链表堆栈C实现
- 【以太网数据结构】地址解析协议ARP
- 对带头结点的单链表的简单操作
- 数据结构作业 校园导航问题