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; }
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
#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; }
--
Foren-Regeln