Mein Reformierter Algorithmus hat nach 6 STunden endlich die Richtige Loesung gefunden \o/

Code:
Tag 1
B  C  A  F  D  E  I  H  G
O  N  L  R  M  Q  P  J  K
Tag 2
O  H  A  B  C  D  L  E  F
R  N  P  Q  I  G  M  K  J
Tag 3
C  I  K  A  B  G  M  D  E
H  N  O  R  F  L  P  Q  J
Tag 4
H  A  N  B  C  E  F  D  M
O  K  R  J  G  I  P  L  Q
Tag 5
H  A  O  J  B  E  D  G  K
L  C  P  N  I  R  F  M  Q
Tag 6
A  L  M  F  H  B  E  C  D
Q  R  O  N  I  K  G  P  J
Tag 7
L  G  C  A  E  D  F  B  I
O  R  Q  M  N  H  K  P  J
Tag 8
P  O  B  F  D  K  G  M  A
R  Q  C  H  I  L  J  N  E
Tag 9
D  A  M  J  G  K  F  E  C
O  B  R  Q  P  N  I  H  L
Tag 10
Q  B  F  N  A  H  C  I  D
R  G  M  P  O  K  J  L  E
Tag 11
B  I  F  J  H  N  A  K  C
L  R  G  O  P  Q  D  M  E
Tag 12
G  E  K  C  B  I  A  J  L
N  O  R  F  D  M  H  P  Q
Tag 13
J  F  G  B  A  D  C  L  E
K  Q  H  R  I  P  O  N  M
Tag 14
J  E  G  I  H  C  B  A  L
R  F  O  K  Q  D  M  N  P
Tag 15
A  F  K  B  D  H  C  J  I
G  O  P  E  N  R  M  L  Q
Tag 16
A  I  G  E  D  C  H  F  B
J  O  Q  P  R  K  M  L  N
Tag 17
A  N  P  D  E  B  G  C  J
F  O  Q  K  L  H  I  R  M
Zur ueberpruefung freigegeben ... Der Code loest aber leider bei einigen Manschaftszahlen eine Pointerexception, keine Ahnung, warum ...

Code:
#include <cstdlib>
#include <iostream>
#include <vector>
#include <math.h>

using namespace std;

#define max 18

int main(int argc, char *argv[])
{
    srand(time(NULL));
    vector< pair <char,char> > o,v,z;
    bool p[max];
    pair<char,char> m;
    int day=0;
    int a = 0,b = 0, num=0;
    int iteration=0; 
    vector< vector< pair<char,char> > > lines;

    for (int i=0; i<(max-1); ++i)
     for (int j=i+1; j<max; ++j)
       o.push_back(pair<char,char>(i,j));
    
   while (num !=(max-1))
   {
    cout<<"\rIteration "<<++iteration<<flush;
    lines.clear(); 
    v.clear();
    v.assign(o.begin(), o.end());
    for(int i=0; i<v.size(); ++i)
     { a=(int)round((v.size()*(1.0*rand()))/RAND_MAX);
       b=(int)round((v.size()*(1.0*rand()))/RAND_MAX);
       m = v[a]; v[a] = v[b]; v[b]=m;
     }
    while(!v.empty())
     {
       for (int i=0; i<max; ++i)
        p[i]=true;
       z.clear();
       for (int i=0; i<(max/2); ++i)
         for (int j=0; j<v.size(); ++j)
          {
            m = v[j];
            if (p[m.first] && p[m.second])
             {
               z.push_back(m);
               p[m.first]=false;
               p[m.second]=false;
               v.erase(v.begin()+j);
               --j;
             }
          }
    lines.push_back(z);
     }
   num = lines.size();
    }
    cout<<endl;
    while (!lines.empty())
     { z.clear(); z.assign(lines[0].begin(), lines[0].end());
       cout<<"Tag "<<++day<<"          "<<endl;
       for(int i=0; i<z.size(); ++i)
        cout<<(char)('A'+z[i].first)<<"  ";
       cout<<endl;
       for(int i=0; i<z.size(); ++i)
        cout<<(char)('A'+z[i].second)<<"  ";
       cout<<endl;
       lines.erase(lines.begin());
     }
    system("PAUSE");
    return EXIT_SUCCESS;
}