AOJ 문제 중에 PROMISES문제를 풀고 있는데
제가 짠 코드로 하다가 계속 오답으로 뜨길래
책에 있는 코드로 거의 똑같이 했는데 계속 오답이라고 하네요...ㅠㅠ
floyd 알고리즘 사용하고 나서
각 간선이 추가 될때마다 adj[a][b]와 c 를 비교 해서
조건 확인하고 update하는 방식인데....
왜 틀린걸까요??
언어는 c++입니다
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
const int MAX_V=200;
int v;
const int INF=987654321;
int adj[MAX_V][MAX_V]; //없는 간선은 INF로 초기화
void initialAdj();
int main()
{
freopen("input.txt", "r", stdin);
int testCase;cin>>testCase;
for(int cases=0;cases<testCase;cases++)
{
int n,m;cin>>v;cin>>n;cin>>m;
initialAdj();
for(int i=0;i<n;i++)
{
int a,b,c;cin>>a;cin>>b;cin>>c;
adj[a][b]=c;
adj[b][a]=c;
}
for(int k=0;k<v;k++)
for(int i=0;i<v;i++)
for(int j=0;j<v;j++)
adj[i][j]=min(adj[i][j],adj[i][k]+adj[k][j]);
int sum=0;
for(int l=0;l<m;l++)
{
int a,b,c;cin>>a;cin>>b;cin>>c;
if(adj[a][b]<=c)
{
sum++;
continue;
}
else
{
for(int i=0;i<v;i++)
for(int j=0;j<v;j++)
adj[i][j]=min(adj[i][j],min(adj[i][a]+c+adj[b][j],adj[i][b]+c+adj[a][j]));
}
}
cout<<sum<<endl;
}
}
void initialAdj()
{
for(int i=0;i<v;i++)
for(int j=0;j<v;j++)
if(i==j)
adj[i][j]=0;
else
adj[i][j]=INF;
}
rundun159
AOJ 문제 중에 PROMISES문제를 풀고 있는데
제가 짠 코드로 하다가 계속 오답으로 뜨길래
책에 있는 코드로 거의 똑같이 했는데 계속 오답이라고 하네요...ㅠㅠ
floyd 알고리즘 사용하고 나서
각 간선이 추가 될때마다 adj[a][b]와 c 를 비교 해서
조건 확인하고 update하는 방식인데....
왜 틀린걸까요??
언어는 c++입니다
7년 전