Exercises/길찾기
1504 cpp
sysout.초코우유
2018. 5. 5. 20:24
cpp로 짰으나 여전히 시간 초과.
#include<stdio.h> #define MAX_COL 800; void shortestRouteMtx(int route[][MAX_COL], int size){ bool unchanged=true; int unchangedCheck=0; for(int i=0;i<size;i++){ unchanged=true; for(int j=0;j<size;j++){ for(int k=0;k<size;k++){ unchangedCheck=route[j][k]; if(j==k){ route[j][k]=0; } else{ for(int l=0;l<size;l++){ if(route[j][l]!=0 && route[l][k]!=0){ if(route[j][k]==0 || (route[j][k]>route[j][l]+route[l][k] && route[j][k]!=0)){ route[j][k]=route[j][l]+route[l][k]; } } } } if(unchanged){ unchanged=(unchangedCheck==route[j][k]); } } } if(unchanged){ break; } } return; } int main(){ int n=0, k=0; scanf("%d",&n); scanf("%d",&k); int route[n][MAX_COL]; for(int i=0;i<n;i++){ for(int j=0;j<j++){ route[i][j]=0; } } int start,end,distance; for(int i=0;i<k;i++){ scanf("%d",&start); scanf("%d",&end); scanf("%d",&distance); route[start-1][end-1]=distance; route[end-1][start-1]=distance; } shortestRouteMtx(route,n); int mid1,mid2; scanf("%d",&mid1); scanf("%d",&mid2); int startToMid1=route[0][mid1-1]; int mid1ToMid2=route[mid1-1][mid2-1]; int mid2ToEnd=route[mid2-1][n-1]; int startToMid2=route[0][mid2-1]; int mid2ToMid1=route[mid2-1][mid1-1]; int mid1ToEnd=route[mid1-1][n-1]; if(startToMid1*mid1ToMid2*mid2ToEnd==0) { if(startToMid2*mid2ToMid1*mid1ToEnd==0) { printf("%d",-1); } else { printf("%d",startToMid2+mid2ToMid1+mid1ToEnd); } } else if(startToMid2*mid2ToMid1*mid1ToEnd==0) { printf("%d",startToMid1+mid1ToMid2+mid2ToEnd); } else if(startToMid1+mid1ToMid2+mid2ToEnd<startToMid2+mid2ToMid1+mid1ToEnd) { printf("%d",startToMid1+mid1ToMid2+mid2ToEnd); } else { printf("%d",startToMid2+mid2ToMid1+mid1ToEnd); } return 0; }