Hey guys! It’s my first time on the forum so sorry if I am asking the question incorrectly. I was working through the problem Moocast, when I encountered an error with my code. I don’t know exactly what I’m doing wrong here, so help would be appreciated. I downloaded the test cases from the site and I am failing to diagnose the exact problem, but I think my program can be divided into 3 main sections: the input, the adjacency vector, and the dfs to find the maximum.
I’m sure the input is 100% good due to cout testing, and I’m also fairly sure the dfs algorithm is solid, so I suppose the issue lies with the adjacency vector. Some help would be greatly appreciated!
/*
ID: theparadox
TASK: moocast
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
const int MAXSIZE = 200;
int N;
int x[MAXSIZE];
int y[MAXSIZE];
float power[MAXSIZE];
bool visited[MAXSIZE];
vector<int> adj[MAXSIZE];
//Counts All Nodes Reachable Starting from Base Node
int dfs(int cow){
int visCount = 1;
visited[cow] = true;
for(auto neighbour : adj[cow]){
if(!visited[neighbour]){
visCount+= dfs(neighbour);
}
}
return visCount;
}
//Resets Visited Array
void resetVisited(){
for(int i = 0; i < N; i++){
visited[i] = false;
}
}
//Distance Between Two Cows Calculator
float distance(int x1, int y1, int x2, int y2) {
return sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2) * 1.0);
}
int main() {
ofstream fout ("moocast.out");
ifstream fin ("moocast.in");
fin >> N;
//Put Info in arrays
int powerVal;
int xVal;
int yVal;
for(int i = 0; i < N; i++){
fin >> xVal;
fin >> yVal;
fin >> powerVal;
x[i] = xVal;
y[i] = yVal;
power[i] = powerVal;
}
//Make Directed Adjacency Vector
for(int i = 0; i < N; i++){
for(int j = i + 1; j < N; j++){
if(distance(x[i],y[i],x[j],y[j]) <= power[i]){
adj[i].push_back(j);
}
}
}
//Find Maximum Cows Reachable
int maximum = 0;
int num;
for(int i = 0; i < N; i++){
//Reset
resetVisited();
//Find
num = dfs(i);
if(num > maximum){
maximum = num;
}
//Repeat
}
fout << maximum;
return 0;
}