PTA - 09 - 최소 생 성 트 리 도로 마을 통 Prime 알고리즘 (c 언어)
기 존의 마을 간 도로 에 대한 통계 데이터 표 에는 표준 도로 로 건설 할 수 있 는 몇 개의 도로 의 원가 가 열거 되 어 있 으 며, 모든 마을 이 도로 연결 에 필요 한 최저 원 가 를 가지 도록 한다.
입력 형식: 입력 데 이 터 는 도시 수 정수 N (≤ 1000) 과 후보 도로 수 목 M (≤ 3N) 을 포함한다.그 다음 에 M 행 은 M 개의 도로 에 대응 하여 각 줄 에 3 개의 정 수 를 주 었 는데 그것 이 바로 이 도로 가 직접 연 결 된 두 도시 의 번호 와 이 도로 개축 의 예산 비용 이다.간단하게 말하자면, 도 시 는 1 부터 N 까지 번호 가 있다.
출력 형식: 마을 통 에 필요 한 최저 비용 을 출력 합 니 다.입력 데이터 가 원활 하지 못 하면 출력 - 1 은 더 많은 도 로 를 건설 해 야 한 다 는 뜻 이다.
입력 예시:
6 15
1 2 5
1 3 3
1 4 7
1 5 4
1 6 2
2 3 4
2 4 6
2 5 2
2 6 6
3 4 6
3 5 1
3 6 1
4 5 10
4 6 8
5 6 3
출력 예시:
12
코드 는 다음 과 같 습 니 다:
#include
#include
int map[1001][1001];
int minCost[1001];//
int visited[1001];
int N,M;
int min(int a,int b)
{
return a > b ? b : a;
}
int prime()
{
int i,sum=0,v;
for(i=1;i<=N;i++)
minCost[i]=99999999;//
minCost[1]=0;
while(1)
{
v = -1;
for(i=1;i<=N;i++)//
{
if(!visited[i]&&(v==-1||minCost[v]>minCost[i]))
v = i;
}
if(v==-1)
break;//
if(minCost[v]==99999999)
return 0;// , ,
visited[v]=1;
sum+=minCost[v];
for(i=1;i<=N;i++)
{
if(map[v][i])
minCost[i]=min(minCost[i],map[v][i]);//
}
}
for(i=1;i<=N;i++)
{
if(!visited[i])
return 0;
}
return sum;
}
int main()
{
int i;
int city1,city2,cost;
scanf("%d %d",&N,&M);
for(i=0;i<M;i++)
{
scanf("%d %d %d",&city1,&city2,&cost);
map[city1][city2]=cost;// 0
map[city2][city1]=cost;
}
int sum = prime();
if(sum)
printf("%d
",sum);
else
printf("-1
");
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
LeetCode - 503. 다음 더 큰 요소 II (Next Greater Element II) [중간] - 분석 및 코드 (Java)순환 배열 (마지막 요소 의 다음 요 소 는 배열 의 첫 번 째 요소) 을 지정 하고 모든 요소 의 다음 요 소 를 출력 합 니 다.숫자 x 의 다음 더 큰 요 소 는 배열 에 따라 순 서 를 옮 겨 다 니 는 것 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.