池子法 邻接表建图
[cpp]#include <stdio.h>
#include <cstring>
#define maxn 1000
struct edge
{
int from,to,next,val;
} e[maxn];
int first[maxn];
int main()
{
int n;
while(scanf("%d",&n)==1)
{
memset(first,-1,sizeof(first));
for(int i=0; i<n; i++)
{
scanf("%d%d%d",&e[i].from,&e[i].to,&e[i].val);
e[i].next=first[e[i].from];
first[e[i].from]=i;
}
for(int i=1; i<10; i++)
{
printf("以%d为起点的边是:\n",i);
for(int u=first[i];u!=-1;u=e[u].next)
printf("%d %d %d\n",e[u].from,e[u].to,e[u].val);
}
}
return 0;
}
一下为转载、、
#include<iostream>
#define Maxn 200
using namespace std;
struct edge{int from,to,weight,next;}e[Maxn];//存储边信息的结构体
#include <stdio.h>
#include <cstring>
#define maxn 1000
struct edge
{
int from,to,next,val;
} e[maxn];
int first[maxn];
int main()
{
int n;
while(scanf("%d",&n)==1)
{
memset(first,-1,sizeof(first));
for(int i=0; i<n; i++)
{
scanf("%d%d%d",&e[i].from,&e[i].to,&e[i].val);
e[i].next=first[e[i].from];
first[e[i].from]=i;
}
for(int i=1; i<10; i++)
{
printf("以%d为起点的边是:\n",i);
for(int u=first[i];u!=-1;u=e[u].next)
printf("%d %d %d\n",e[u].from,e[u].to,e[u].val);
}
}
return 0;
}
一下为转载、、
#include<iostream>
#define Maxn 200
using namespace std;
struct edge{int from,to,weight,next;}e[Maxn];//存储边信息的结构体
int first[Maxn];//起点为下标存储(e中边的位置)
int main()
{
int edges;//边数
memset(first,-1,sizeof(first));
//因为刚开始first不指向任何一条边的下标,所以first都为-1
cin>>edges;//边数
for(int i=0;i<edges;i++)
{
cin>>e[i].from>>e[i].to>>e[i].weight;//起点 终点 权重
e[i].next=first[e[i].from];first[e[i].from]=i;//不容易理解的地方
/*
利用first数组存储的是最新的(以数组下标为起点的)边的下标
并且该条边的next指向的是同样以数组下标为起点的下一条边的下标
直到下一条边的next=-1(即将所有以数组下标为起点的边都遍历了一遍)
*/
}
for(int u=1;u<10;u++)//输出图
{
cout<<"以"<<u<<"为起点的所有边的信息:"<<endl;
for(int v=first[u];v!=-1;v=e[v].next)//遍历以u为起点的所有边的信息
cout<<e[v].from<<" "<<e[v].to<<" "<<e[v].weight<<endl;
}
return 0;
}
/*
5
3 4 6
3 7 8
1 3 6
2 4 7
3 5 1
*/</span>
int first[Maxn];//起点为下标存储(e中边的位置)
int main()
{
int edges;//边数
memset(first,-1,sizeof(first));
//因为刚开始first不指向任何一条边的下标,所以first都为-1
cin>>edges;//边数
for(int i=0;i<edges;i++)
{
cin>>e[i].from>>e[i].to>>e[i].weight;//起点 终点 权重
e[i].next=first[e[i].from];first[e[i].from]=i;//不容易理解的地方
/*
利用first数组存储的是最新的(以数组下标为起点的)边的下标
并且该条边的next指向的是同样以数组下标为起点的下一条边的下标
直到下一条边的next=-1(即将所有以数组下标为起点的边都遍历了一遍)
*/
}
for(int u=1;u<10;u++)//输出图
{
cout<<"以"<<u<<"为起点的所有边的信息:"<<endl;
for(int v=first[u];v!=-1;v=e[v].next)//遍历以u为起点的所有边的信息
cout<<e[v].from<<" "<<e[v].to<
补充:软件开发 , C++ ,