이전 코스 중 하나에 대해 설정 한 문제에 대해 작업하고 있습니다. 노드에 도달 할 수 있지만 경우 노드 (*
로 출력) 알 수없는 테스트 케이스에서 실패한 Bellman Ford 알고리즘
s
에서 도달 할 수없는 경우
- : 나는 소스
s
에서, 나는 다음을 찾을 수 있다고 벨만 포드 알고리즘은 구현 하죠 음의주기 A A 부분 및 따라서 더 짧은 경로가 없다 (-
로서 출력) 그렇지 - , I는 FOLLO를 작성한
노드에 s
출력 최단 알려지지 않은 테스트 케이스에서 실패하는 윙 코드. 누군가 나를 디버깅 할 수 있습니까?
void relax_edges(vector <vector<int>> &adj,
vector <vector<int>> &cost,
vector<long long> &dis)
{
/*Takes input as adjacency list and relax all possible edges
*/
for (int i = 0; i < adj.size(); i++) {
for (int j = 0; j < adj[i].size(); j++) {
if (dis[i] < std::numeric_limits < long long > ::max()
&& dis[adj[i][j]] > dis[i] + cost[i][j]){
//std::cout<< adj[i][j]<<" "<<i<<"\n";
dis[adj[i][j]] = dis[i] + cost[i][j];
}
}
}
}
void bfs(vector<vector<int> > &adj, vector<int>& shortest, int s){
vector<int> seen (adj.size(), 0);
//seen[s] = 1;
queue<int> q;
q.push(s);
int t;
while(!q.empty()){
t = q.front();
q.pop();
if (seen[t] == 3)
break;
seen[t]+=1;
for(int i=0;i<adj[t].size();i++){
q.push(adj[t][i]);
}
}
for(int i=0;i<seen.size();i++)
if(seen[i]>=1)
shortest[i] = 0;
}
void shortest_paths(vector <vector<int>> &adj,
vector <vector<int>> &cost,
int s,
vector<long long> &dis,
vector<int> &reachable,
vector<int> &shortest) {
dis[s] = 0;// distance of s is 0 from s
int result;
for (int i = 0; i < adj.size() - 1; i++) { //Running Bellman Ford |V-1| times
relax_edges(adj, cost, dis);
}
vector<long long> distance2(dis.size(), 0);
for (int i = 0; i < distance2.size(); i++)
distance2[i] = dis[i];
relax_edges(adj, cost, distance2); // Running it |V|th time to identify negative cycle nodes
relax_edges(adj, cost, distance2); //Running it |V+1|th time to identify the first node of the negative cycle.
for(int i=0;i<distance2.size();i++){
//std::cout<<distance2[i]<<" "<<dis[i]<<"\n";
if(distance2[i]!=dis[i]){
bfs(adj, shortest, i);
shortest[i] = 0;
}
if (dis[i] < std::numeric_limits<long long>::max())
reachable[i] = 1;
}
}
문제는 어떤 테스트 케이스가 실패했는지 식별 할 수 없다는 것입니다.
사실, 당신 말이 맞습니다. 나는 한 단어 대 단어 요구 사항 2에 중점을 두었고 문자 그대로 취해질 때 요구 사항 3에 대해 항상 의미가있는 것은 아니라는 것을 알아 채지 못했습니다. – Ardavel
안녕하세요, @ 답장을 보내 주셔서 감사합니다. 나는 너의 요점을 이해한다. 불행히도, 다른 테스트 케이스에서 BFS를 추가 할 때 업데이트 된 코드는 여전히 실패하고 있습니다. – user3667569
@ user3667569 고정 된 BFS 구현을 추가하기 위해 제 대답을 편집했습니다. – Ardavel