您的位置:首页 > 其它

链式前向星,前向星,vector模拟链表

2017-04-11 09:14 295 查看
链式前向星:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1000;
int num = 1;
int n, m;
int head[maxn];
struct node
{
int to;
int next;
int w;
}edge[maxn];
void init()
{
memset(head, -1, sizeof(head));
num = 1;
}
void out_put()
{
for (int i = 1; i <= n; i++)
{
for (int k = head[i]; k != -1; k = edge[k].next)
{
printf("%d->%d w = %d\n",i, edge[k].to,edge[k].w);
}
}
}
int main()
{
int a, b, w;
while (~scanf("%d %d",&n,&m))
{
init();
for (int i = 1; i <= m; i++)
{
scanf("%d%d%d",&a,&b,&w);
edge[num].to = b;
edge[num].w = w;
edge[num].next = head[a];
head[a] = num;
num++;
}
out_put();
}
return 0;
}

前向星:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1000;
int n,m;
int head[maxn];
struct node
{
int from;
int to;
int w;
}edge[maxn];
bool cmp(node a, node b)
{
if (a.from == b.from && a.to == b.to)
{
return a.w < b.w;
}
else if (a.from == b.from && a.to != b.to)
{
return a.to < b.to;
}
else return a.from < b.from;
}
int main()
{
while (~scanf("%d%d",&n,&m))
{
for (int i = 1; i <= m; i++)
{
scanf("%d%d%d",&edge[i].from,&edge[i].to,&edge[i].w);
}
sort(edge+1,edge+1+m,cmp);
memset(head,-1,sizeof(head));
for (int i = 1; i <= m; i++)
{
if (edge[i].from != edge[i-1].from)
{
head[edge[i].from] = i;
}
}
for (int i = 1; i <= n; i++)
{
for (int k = head[i]; edge[k].from == i && k <= m; k++)
{
printf("%d->%d,w is %d\n",edge[k].from,edge[k].to,edge[k].w);
}
}
}
return 0;
}

vector模拟链表:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1000;
const int maxm = 1000000;
int n, m;
struct node
{
int to;
int w;
};
vector<node> val[maxn];
bool cmp(node a, node b)
{
return a.to < b.to;
}
void out_put()
{
vector<node>::iterator it;
for (int i = 1; i <= n && val[i].size() > 0; i++)
{
sort(val[i].begin(),val[i].end(),cmp);
for (it = val[i].begin(); it != val[i].end(); it++)
{
node tmp = *it;
cout << i << " " << tmp.to << " " << tmp.w << endl;
}
}
}
int main()
{
int a, b, w;
while (cin >> n >> m)
{
for (int i = 1; i <= m; i++)
{
node e;
cin >> a >> b >> w;
e.to = b;
e.w = w;
val[a].push_back(e);
}
out_put();
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: