Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <string>
- #include <math.h>
- #include <algorithm>
- using namespace std;
- class JeuKslanTN {
- public :
- JeuKslanTN(vector<vector<double>> Board)
- {
- board = Board;
- str_max = "";
- str_min = "";
- calculs();
- afficher();
- }
- private :
- vector<vector<double>> board;
- vector<double> resultats;
- vector<double> resultats_ranges;
- vector<string> paths;
- string str_max;
- double max;
- string str_min;
- double min;
- double moyenne;
- double mediane;
- void calculs()
- {
- int compteur = 0;
- for (unsigned int i = 0 ; i < board.size(); i++) {
- for (unsigned int k = 0; k < board[i].size(); k++) {
- compteur++;
- cout << "case : " << i << " " << k << endl;
- chemins(board, i, k,"", 1);
- }
- }
- cout << endl;
- ranger();
- min = resultats_ranges[0];
- max = resultats_ranges.back();
- int i = 0;
- while (str_min == "" || str_max == "") { // à opti
- if(resultats[i] == max && (str_max == "" || str_max.size() > paths[i].size())) {
- str_max = paths[i];
- }
- if(resultats[i] == min && (str_min == "" || str_min.size() > paths[i].size())) {
- str_min = paths[i];
- }
- i++;
- }
- double somme_scores = somme();
- moyenne = somme_scores / resultats.size();
- if(resultats.size() % 2 == 0) {
- mediane = ((resultats_ranges[resultats.size()/2-1]) + (resultats_ranges[resultats.size()/2]))/2.;
- }
- else {
- mediane = resultats_ranges[ceil((resultats.size()-1)/2)];
- }
- }
- void chemins(vector<vector<double>> tab, int x, int y,string str, double score)
- {
- unsigned int mX = 0; unsigned int MX = 0; unsigned int mY = 0; unsigned int MY = 0;
- score *= tab[x][y];
- resultats.push_back(score);
- str += " -> " + to_string(tab[x][y]);
- paths.push_back(str);
- tab[x][y] = -1;
- if (score > 0) {
- vector<int> retour = limites(x,y,mX,MX,mY,MY);
- mX = retour[0]; MX = retour[1]; mY = retour[2]; MY = retour[3];
- for(unsigned int i = x - 1 + mX ; i <= x + 1 - MX ; i++) {
- if(tab[i][y] != -1) chemins(tab,i,y,str,score);
- }
- for(unsigned int k = y - 1 + mY ; k <= y + 1 - MY ; k++) {
- if(tab[x][k] != -1) chemins(tab,x,k,str,score);
- }
- }
- }
- vector<int> limites(unsigned int x,unsigned int y,int mX,int MX,int mY,int MY)
- {
- if (x == 0)
- mX = 1;
- else
- mX = 0;
- if (x == board.size() -1)
- MX = 1;
- else
- MX = 0;
- if (y == 0)
- mY = 1;
- else
- mY = 0;
- if (y == board[x].size() -1)
- MY = 1;
- else
- MY = 0;
- vector<int> retour = {mX,MX,mY,MY};
- return retour;
- }
- void afficher()
- {
- cout << "****************************************************************************\n\n";
- cout << "Nombres de possibilites : " << resultats.size() << endl << endl;
- cout << "min = " << min << endl;
- cout << str_min << endl << endl;
- cout << "max = " << max << endl;
- cout << str_max << endl << endl;
- cout << "moyenne = " << moyenne << endl;
- cout << "mediane = " << mediane << endl;
- cout << "\n****************************************************************************";
- }
- void ranger()
- {
- resultats_ranges = resultats;
- sort(resultats_ranges.begin(),resultats_ranges.end());
- }
- double somme()
- {
- double s = 0;
- for (unsigned int i = 0 ; i < resultats.size() ; i++) {
- s += resultats[i];
- }
- return s;
- }
- };
- int main()
- {
- cout << "";
- vector<vector<double>> Board = {
- {0.0 , 2.0 , 2.5 , 1.5 , 2.5 , 1.0},
- {3.0 , 1.5 , 1.0 , 2.5 , 0.0 , 2.0},
- {1.5 , 0.0 , 1.0 , 2.5 , 1.5 , 1.0},
- {2.0 , 1.5 , 5.0 , 5.0 , 2.0 , 0.0},
- {1.0 , 2.0 , 0.0 , 3.0 , 1.5 , 3.0}
- };
- JeuKslanTN jeu(Board);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement