记录编号 229202 评测结果 AAAAAAAAAAA
题目名称 [福州培训2010] 最短路 最终得分 100
用户昵称 GravatarGo灬Fire 是否通过 通过
代码语言 C++ 运行时间 0.176 s
提交时间 2016-02-20 06:40:00 内存使用 0.45 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
#include<cstdio>
#include<cmath>
#define Mem(arr,val) memset(arr,val,sizeof(arr));
using namespace std;
const int maxn=110;
const int maxe=maxn*maxn;
struct Edge{
	int to,dis,next;
}e[maxe];
struct Node{
	int num,dis;
	Node(){	};
	Node(int a,int b){num=a;dis=b;}
	bool operator <(const Node&a)const 
	{
		return dis>a.dis;
	}
};
int n,m,len=0,d[maxn][maxn],head[maxn];
void Init();
void Insert(int,int,int);
void Dijs(int);
int main()
{
	freopen("shorta.in","r",stdin);
	freopen("shorta.out","w",stdout);
	Init();
	for(int i=1;i<=n;i++)
	{
		Dijs(i);
		cout<<endl;
	}
	return 0;
}
void Init()
{
	Mem(e,0);Mem(d,-1);Mem(head,-1);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		int x,y,z;
		scanf("%d%d%d",&x,&y,&z);
		Insert(x,y,z);
		Insert(y,x,z);
	}
}
void Insert(int x,int y,int z)
{
	len++;
	e[len].to=y;
	e[len].dis=z;
	e[len].next=head[x];
	head[x]=len;
}
void Dijs(int x)
{
	int dis[maxn];bool f[maxn];
	Mem(f,0);Mem(dis,0x7f);
	priority_queue<Node> q;
	dis[x]=0;f[x]=1;
	q.push(Node(x,dis[x]));
	while(!q.empty())
	{
		Node temp=q.top();
		q.pop();
		int k=temp.num;f[k]=1;
		for(int i=head[k];i!=-1;i=e[i].next)
		{
			int j=e[i].to;
			if(!f[j] && dis[j]>dis[k]+e[i].dis)
			{
				dis[j]=dis[k]+e[i].dis;
				q.push(Node(j,dis[j]));
			}
		}
	}
	for(int i=1;i<=n;i++)
	{
		d[x][i]=dis[i];
		cout<<dis[i]<<" ";
	}
}