일단 문제는 이거야
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞은 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 2 초 | 128 MB | 5510 | 1769 | 986 | 34.355% |
n(1≤n≤1,000)개의 도시가 있다. 그리고 한 도시에서 출발하여 다른 도시에 도착하는 m(1≤m≤100,000)개의 버스가 있다. 우리는 A번째 도시에서 B번째 도시까지 가는데 드는 버스 비용을 최소화 시키려고 한다. 그러면 A번째 도시에서 B번째 도시 까지 가는데 드는 최소비용을 출력하여라.
첫째 줄에 도시의 개수 n(1≤n≤1,000)이 주어지고 둘째 줄에는 버스의 개수 m(1≤m≤100,000)이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가 주어진다. 그리고 그 다음에는 도착지의 도시 번호가 주어지고 또 그 버스 비용이 주어진다. 버스 비용은 0보다 크거나 같고, 100,000보다 작은 정수이다.
그리고 m+3째 줄에는 우리가 구하고자 하는 구간 출발점의 도시번호와 도착점의 도시번호가 주어진다.
첫째 줄에 출발 도시에서 도착 도시까지 가는데 드는 최소 비용을 출력한다.
에디터에서 컴파일 하면 맞았다고 하는데 저 씨불놈의 사이트에서 채점하면 틀렸다한다 뭐가 문젠지 전혀모르겠음
아래서 부터는 소스
#include <stdio.h>
#define Max 1000 //노드 최대값
#define INF 100001 //무한대를 표현하기 위한 상수값입니다.
int cnt=0,start,end,node,edge,value;
int select[Max]; //선택 배열
int root[Max][Max];
void make (void);
int dijk (void);
main()
{
int i;
make();
dijk();
}
int dijk()
{
int index[Max];
int i,j,val,cnt,min=INF,se=1; //se변수는 선택배열에 선택된 최소값의 노드를 순서대로 넣기 위해 선언한 변수입니다.
for(i=2;i<=node;i++){
select[i]=0;
}
select[se]=start;
//인덱스 초기화
for(i=1;i<=node;i++){
index[i]=root[start][i];
}
while(select[node]==0){
min=INF;
se++;
for(i=1;i<=node;i++){
val=0;
for(j=1;j<=node;j++){
if(select[j]==i){
val=1;
break;
}
}
if(min>index[i] && val==0){
min=index[i];
cnt=i;
}
}
select[se]=cnt; // 제일 작은 값의 노드를 선택배열에 넣습니다.
//업데이트 부분
for(i=1;i<=node;i++){
if(index[i]>index[cnt]+root[cnt][i])index[i]=index[cnt]+root[cnt][i];
}
}
printf("%d",index[end]);
}
void make(void){
scanf("%d %d",&node,&edge);
int i,j,a,b,c;
//배열초기화
for(i=1;i<=node;i++){
for(j=1;j<=node;j++){
root[i][j]=INF;
if(i==j)root[i][j]=0;
}
}
for(i=1;i<=edge;i++){ //엣지 갯수만큼 경로를 입력받음
scanf("%d %d %d",&a,&b,&c);
root[a][b]=c;
}
scanf("%d %d",&start,&end);
}
갯수->개수 (개수 (個數)[명사] : 한 개씩 낱으로 셀 수 있는 물건의 수효.) [리듬 맞춤법 봇♬]