hdu3631 Shortest Path(floyd 플러그인)
Shortest Path
제목:
n, m, q에게 n개의 점 m조 변의 q개를 표시하고 질문마다 두 가지 방식 0x를 묻습니다. 표시x를 표시하고 표시된 경우 ERROR을 출력합니다!At point x 1 x y는 출력 x에서 y까지의 최단 거리를 표시하고 x와 y 모두 및 최단 경로의 점을 표시해야 합니다. 만약에 x나 y가 출력 ERROR을 표시하지 않았다면!At path x to y, x에서 y 사이의 경로가 없으면 No such path 출력
Sample Input
5 10 10 1 2 6335 0 4 5725 3 3 6963 4 0 8146 1 2 9962 1 0 1943 2 1 2392 4 2 154 2 2 7422 1 3 9896 0 1 0 3 0 2 0 4 0 4 0 1 1 3 3 1 1 1 0 3 0 4 0 0 0
Sample Output
Case 1: ERROR! At point 4 ERROR! At point 1 0 0 ERROR! At point 3 ERROR! At point 4
분석:
삽입법, 또 못 들은 이름, 적어
우리가 점을 표시할 때마다 표시된 이 점을floyd 과정 중의 중간 노드 k로 하고 이 k로 모든 점 간의 최단로를 업데이트합니다
code:
#include
#include
#include
#include
#include
const int inf=0x3f3f3f3f;
const int inn=0x80808080;
using namespace std;
const int maxm=305;
int g[maxm][maxm];
int mark[maxm];
int n,m,q;
void init(){
memset(g,inf,sizeof g);
for(int i=0;i<n;i++)g[i][i]=0;
memset(mark,0,sizeof mark);
}
void floyd(int k){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
g[i][j]=min(g[i][j],g[i][k]+g[k][j]);
}
}
}
int main(){
int cas=1;
while(scanf("%d%d%d",&n,&m,&q)!=EOF){
if(!n&&!m&&!q)break;
if(cas-1)puts("");
init();
for(int i=1;i<=m;i++){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
g[a][b]=min(g[a][b],c);
}
printf("Case %d:
",cas++);
while(q--){
int d;
scanf("%d",&d);
if(d==0){
int x;
scanf("%d",&x);
if(!mark[x]){
mark[x]=1;
floyd(x);
}else{
printf("ERROR! At point %d
",x);
}
}else{
int a,b;
scanf("%d%d",&a,&b);
if(!mark[a]||!mark[b]){
printf("ERROR! At path %d to %d
",a,b);
}else{
if(g[a][b]==inf){
printf("No such path
");
}else{
printf("%d
",g[a][b]);
}
}
}
}
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.