Ciao a tutti. Stavo risolvendo Police investigation 5 e, nonostante i testcase di esempio risultino tutti corretti, mi vengono dati errori di Execution killed (could be triggered by violating memory limits) e output non corretto. Il mio codice è il seguente:
#include <iostream>
#include <fstream>
#include <vector>
#include<climits>
using namespace std;
void stampa(vector<vector<int>> G){
for(int i=0; i<G.size(); i++){
for(int j=0; j<G[0].size(); j++){
std::cout<<G[i][j]<<"\t";
}
std::cout<<"\n";
}
}
int dijkstra(vector<vector<int>> &G, int n){
int m=0, i=0, j=0;
int x=0, y=n-1;//x=partenza, y=arrivo
vector<int> d(n,INT_MAX), p(n,-1);
vector<bool> v(n, false);
d[x]=0;
p[x]=0;
while(true) {
for(m=INT_MAX, i=0; i<n; i++){
if (!v[i] && d[i] <= m){
m = d[j=i];
}
}
v[j] = 1;
if (j == y || m == INT_MAX){
break;
}
for(i=0; i<n; i++){
if (G[j][i]>=0 && d[i] > d[j] + G[j][i]){
d[i] = d[j] + G[j][i];
p[i]=j;
}
}
}
return d[n-1];
}
int solve(vector<int> &A, vector<int> &B, vector<int> &C, vector<int> &E, int N, int M, int T){
vector<vector<int>> matrix(N,vector<int>(N,-1));
int a;
for(int i=0; i<M; i++){
if(E[i]==0||(E[i]==1&&C[i]<=T)){
matrix[A[i]][B[i]]=C[i];
}
}
//stampa(matrix);
a=dijkstra(matrix, N);
if(a>=INT_MAX){
return -1;
}
return a;
}
int main() {
int N, M, T;
int answer=0;
ifstream fin("input.txt");
ofstream fout("output.txt");
fin >>N>> M>>T;
vector<int> A(M), B(M), C(M), E(M);
for (int i=0; i<M; i++){
fin >>A[i]>>B[i]>>C[i]>>E[i];
}
answer=solve(A,B,C,E,N,M,T);
fout << answer << "\n"; // print the result
return 0;
}
Gentilmente qualcuno protrebbe aiutarmi, per esempio fornendomi dei testcase dove sbaglio?
Grazie in anticipo.
EDIT: ho ottenuto un 20/100 passando la matrice G per riferimento, come si può vedere nel codice sopra (aggiornato), ma ci sono dei testcase dove il mio output non è corretto