Ciao a tutti, stavo provando Mazzi di Carte con un vector, ma quando passo il vector alla funzione, le deque che si creano sono vuote, nonostante le abbia riempite in input. Inoltre quando debuggo mi dà un errore in riga 32: “Thread 1 Sigsev, segmentation fault”, che da quanto ho capito è un errore dovuto a un overflow. Qualcuno sa dirmi perchè? Grazie di tutto.
#include<iostream>
#include<vector>
#include<deque>
using namespace std;
#define _ <<" "
#define input for(int i=0; i<N; i++){for(int j=0; j<M; j++)cin>>card[i][j];}
int gioca(int N, int M, vector<deque<int>> &cards)
{
int conta=0;
int max;
for(int i=0; i<N; i++)
{
int maxc=cards[i][0];
for(int j=1; j<cards[i].size(); j++){
//rimuovo tutte le carte in mezzo al mazzo con valori bassi(in quanto oscurate dai valori precedenti)
//così mi ritroverò con le carte massime alla fine di ogni mazzo
if(cards[i][j]<=maxc)
{
cards[i].erase(cards[i].begin()+j);
j--;
}
else
maxc=cards[i][j];
}
}
while(!cards.empty())
{
int maxcard=0, pos;
//prendo il massimo valore delle carte (iterando su ogni deque da dx)
for(int i=0; i<cards.size(); i++)
{
if(cards[i].back()>maxcard)
{
maxcard=cards[i].back();
pos=i;
}
else if(cards[i].back()==maxcard) //se trovo una carta = al massimo allora la rimuovo
{
cards[i].pop_back();
if(cards[i].empty())
{
cards.erase(cards.begin()+i);
i--;
}
}
}
cards[pos].pop_back();
if(cards[pos].empty())
cards.erase(cards.begin()+pos);
conta++;
}
return conta;
}
int main(){
int N, M; cin>>N>>M;
vector<deque<int>> card(N);
input;
int sol=gioca(N, M, card);
cout<<sol;
}