java有向图邻接表入度_图的实现--邻接表(求出各顶点的出度和入度)
#include
using namespace std;
#include
#define MAX 100
struct ArcNode{//邊結點
int adjvex;//有向邊的另一個鄰接點的序號
ArcNode *nextarc;//指向下一個邊結點的指針
};
struct VNode{
int data;
ArcNode *head1;
ArcNode *head2;
};
struct LGraph{
VNode vertexs[MAX];
int vernum,arcnum;
};
LGraph lg;
void CreateLG(LGraph *lg)
{
int i=0;
ArcNode *pi;
int v1,v2;
//lg->vernum=lg->arcnum=0;
//scanf("%d%d",&lg->vernum,&lg->arcnum);
for(i=0;ivernum;i++)
lg->vertexs[i].head1=lg->vertexs[i].head2=NULL;
for(i=0;iarcnum;i++)
{
scanf("%d%d",&v1,&v2);
v1--;v2--;
pi=new ArcNode;
pi->adjvex=v2;
pi->nextarc=lg->vertexs[v1].head1;
lg->vertexs[v1].head1=pi;
pi=new ArcNode;
pi->adjvex=v1;
pi->nextarc=lg->vertexs[v2].head2;
lg->vertexs[v2].head2=pi;
}
}
void DeleteLG(LGraph *lg)
{
int i;
ArcNode *pi;
for(i=0;ivernum;i++)
{
pi=lg->vertexs[i].head1;
while(pi!=NULL)
{
lg->vertexs[i].head1=pi->nextarc;
delete pi;
pi=lg->vertexs[i].head1;
}
pi=lg->vertexs[i].head2;
while(pi!=NULL)
{
lg->vertexs[i].head2=pi->nextarc;
delete pi;
pi=lg->vertexs[i].head2;
}
}
}
int main()
{
//CreateLG(&lg);
int i;
int id,od;
ArcNode *pi;
while(1)
{
lg.vernum=lg.arcnum=0;
scanf("%d%d",&lg.vernum,&lg.arcnum);
if(lg.vernum==0) break;
CreateLG(&lg);
for(i=0;i
{
od=0;
pi=lg.vertexs[i].head1;
while(pi!=NULL)
{
od++;
pi=pi->nextarc;
}
if(i==0)
printf("%d",od);//輸出出度
else
printf(" %d",od);
}
printf("\n");
for(i=0;i
{
id=0;
pi=lg.vertexs[i].head2;
while(pi!=NULL)
{
pi=pi->nextarc;
id++;
}
if(i==0)
printf("%d",id);//輸出入度
else
printf(" %d",id);
}
printf("\n");
DeleteLG(&lg);
}
return 0;
}//測試數據如下:
//4 7 分別代表定點數和邊數
//1 4//弧尾和弧頭
//2 1
//2 2
//2 3
//2 3
//4 2
//4 3
原文:http://blog.csdn.net/yuzibode/article/details/18359343
總結
以上是生活随笔為你收集整理的java有向图邻接表入度_图的实现--邻接表(求出各顶点的出度和入度)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 数据库数据写接口_Java读取
- 下一篇: java根据ip查计算机名_Java如何