1 solutions
-
0
C :
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #define INF 1000000000 double G[110][110]; int axis[110][2]; int vis[110]; double d[110]; int n, m; int A, B; void dijkstra(){ memset(vis,0,sizeof(vis)); for(int i = 0;i <= n; i++)d[i] = INF; d[A] = 0; for(int i = 1;i <= n; i++){ int u = -1, MIN = INF; for(int j = 1;j <= n; j++){ if(vis[j]==0 && MIN > d[j]){ u = j; MIN = d[j]; } } if(u == B)return; vis[u] = 1; for(int v = 1;v <= n; v++){ if(vis[v]==0 && G[u][v] != 0 && d[v] > d[u] + G[u][v]){ d[v] = d[u] + G[u][v]; } } } } int main() { while(scanf("%d",&n) != EOF){ memset(G,0,sizeof(G)); for(int i = 1;i <= n; i++){ scanf("%d%d",&axis[i][0],&axis[i][1]); } scanf("%d",&m); while(m--){ int a, b; scanf("%d%d",&a,&b); double dis = sqrt((axis[a][0]-axis[b][0])*(axis[a][0]-axis[b][0]) + \ (axis[a][1]-axis[b][1])*(axis[a][1]-axis[b][1])); G[a][b] = G[b][a] = dis; } scanf("%d%d",&A,&B); dijkstra(); printf("%.2f\n",d[B]); } return 0; }
C++ :
#include<cstdio> #include<iostream> #include<cstring> #include<cmath> using namespace std; double x[110],y[110],dis[101],a[101][101]; bool v[101]; int n,m,xx,yy,st,ed; int q[10000]; inline double calc(int i,int j){ return sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])); } void spfa(){ memset(v,0,sizeof(v)); for(int i=1;i<=n;++i) dis[i]=99999999.0; int l=1,r=1; q[1]=st; dis[st]=0; v[st]=true; while (l<=r){ int x=q[l++]; v[x]=false; for(int i=1;i<=n;++i) if (i!=x && a[x][i]<0x7fffffff) if (dis[i]>dis[x]+a[x][i]){ dis[i]=dis[x]+a[x][i]; if (!v[i]){ v[i]=true; q[++r]=i; } } } } int main(){ cin>>n; for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) a[i][j]=0x7fffffff; for(int i=1;i<=n;++i) a[i][i]=0; for(int i=1;i<=n;++i) scanf("%lf%lf",&x[i],&y[i]); cin>>m; for(int i=1;i<=m;++i){ scanf("%d%d",&xx,&yy); if (xx!=yy) a[xx][yy]=a[yy][xx]=calc(xx,yy); } cin>>st>>ed; spfa(); printf("%0.2lf",dis[ed]); return 0; }
- 1
Information
- ID
- 9991
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By