mam takyto naky programik ... problem mam v tom ze ked za x dosadim vacsie cislo ako nakych 40tis tak mi program padne hned na zaciatku .. asi nieco s alokaciou pamati
co mam spravit aby mi to zobralo aj viac
nie som programator tak poprosim budte zhovievavy, moje znalosti cecka su limitovane
Kód:
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int x=40000;
int max[8]={0,10,10,10,10,7,7,7};
int end[8]={0,9,5,5,0,5,5,5};
int stav[8][x];
int riadok[x];
int index[x];
int nad1[x];
int nad2[x];
stav[1][0]=10;
stav[2][0]=10;
stav[3][0]=0;
stav[4][0]=0;
stav[5][0]=0;
stav[6][0]=7;
stav[7][0]=7;
riadok[0]=0;
index[0]=-1;
nad1[0]=0;
nad2[0]=0;
printf ("0 - START %d %d %d %d %d\n\n", stav[1][0], stav[2][0], stav[3][0], stav[4][0], stav[5][0], stav[6][0], stav[7][0]);
int c,prelej,in,n,m,k,j=1;
for(in=1;in<=1000000;in++){
for(n=7;n>=1;n--){
for(m=1;m<=7;m++){
if (n==m){
continue;
}
if ((stav[m][in-1]<max[m]) and (stav[n][in-1]!=0)){
prelej = stav[n][in-1]+stav[m][in-1];
stav[1][j]=stav[1][in-1];
stav[2][j]=stav[2][in-1];
stav[3][j]=stav[3][in-1];
stav[4][j]=stav[4][in-1];
stav[5][j]=stav[5][in-1];
stav[6][j]=stav[6][in-1];
stav[7][j]=stav[7][in-1];
if (prelej <= max[m]){
stav[m][j]=prelej;
stav[n][j]=0;
}
else {
stav[m][j]=max[m];
stav[n][j]=prelej-max[m];
}
for(k=1;k<j;k++){
if ((stav[1][j]==stav[1][k]) and (stav[2][j]==stav[2][k]) and (stav[3][j]==stav[3][k]) and (stav[4][j]==stav[4][k]) and (stav[5][j]==stav[5][k]) and (stav[6][j]==stav[6][k]) and (stav[7][j]==stav[7][k])){
goto end;
}
}
riadok[j]=j;
index[j]=in-1;
nad1[j]=n;
nad2[j]=m;
printf ("%d %d %d->%d ", riadok[j], index[j], nad1[j], nad2[j]);
printf ("%d %d %d %d %d %d %d\n", stav[1][j], stav[2][j], stav[3][j], stav[4][j], stav[5][j], stav[6][j], stav[7][j]);
if ((stav[1][j]==end[1]) and (stav[2][j]==end[2]) and (stav[3][j]==end[3]) and (stav[4][j]==end[4]) and (stav[5][j]==end[5]) and (stav[6][j]==end[6]) and (stav[7][j]==end[7])){
goto quit;
}
j++;
}
end:
c++;
}
}
}
quit:
printf ("\n----------------------------------------------\n\n");
while (j!=0){
printf ("%d %d %d->%d ", riadok[j], index[j], nad1[j], nad2[j]);
printf ("%d %d %d %d %d\n", stav[1][j], stav[2][j], stav[3][j], stav[4][j], stav[5][j], stav[6][j], stav[7][j]);
j=index[j];
}
system("PAUSE");
return EXIT_SUCCESS;
}