邻接矩阵
1.初始化
memset(G,0,sizeof(G));
2.插入边
如果插入一条无向边(u,v)
G[u][v]=G[v][u]=1;
如果插入一条有向边(u,v)
G[u][v]=1;
3.访问边
如果G[u][v]=1,说明有一条从u到v的边,否则没有
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int G[6][6];
memset(G,0,sizeof(G));
int m;
cin>>m;
for(int i=0;i<m;i++)
{
int a,b;
cin>>a>>b;
G[a][b]=1;
}
for(int i=1;i<=5;i++)
{
int sum=0;
for(int j=1;j<=5;j++)
{
if(G[i][j]==1&&G[j][i]==1)
sum++;
}
cout<<i<<"有"<<sum<<"个真正的朋友"<<endl;
}
return 0;
}
邻接表
对于一条从a到b的有向边
G[a].push_back(b);
如果是无向边
G[a].push_back(b);
G[b].push_back(a);
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int>G[11];
int m;
cin>>m;
for(int i=0;i<m;i++)
{
int a,b;
cin>>a>>b;
G[a].push_back(b);
G[b].push_back(a);
}
for(int i=1;i<=10;i++)
{
cout<<i<<":";
for(int j=0;j<G[i].size();j++)
{
cout<<G[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
带权图邻接表的实现
用结构体记录一条边链接的点和这条边的边权,用vector存储若干结构体
struct node{
int v,w;
};
vector<node>G[11];
插入有向边
void insert1(int u,int v,int w)
{
node temp;
temp.v=v;
temp.w=w;
G[u].push_back(temp);
}
插入无向边
void insert2(int u,int v, int w)
{
insert1(u,v,w);
insert1(u,v,w);
}
#include<iostream>
#include<vector>
using namespace std;
struct node{
int v,w;
};
vector<node>G[11];
void insert1(int u,int v,int w)
{
node temp;
temp.v=v;
temp.w=w;
G[u].push_back(temp);
}
void insert2(int u,int v, int w)
{
insert1(u,v,w);
insert1(u,v,w);
}
void input()
{
int m;
cin>>m;
for(int i=0;i<m;i++)
{
int u,v,w;
cin>>u>>v>>w;
insert2(u,v,w);
}
}
void output()
{
for(int i=1;i<=10;i++)
{
for(int j=0;j<G[i].size();j++)
{
cout<<"("<<i<<", "<<G[i][j].v<<","<<G[i][j].w<<")"<<endl;
}
}
}
int main()
{
input();
output();
return 0;
}