/* Copyright 2004 Bob K See: www.gatheringofgray.com */ #include using namespace std; char *solver, *ch; int size; void recurse(char* target, int len) { int offset = size - len; if(len == 0) { solver[size] = target[0]; solver[size+1] = '\0'; cout << solver << "\n"; return; } char *pass = new char[len-1]; for(int x = 0; x < len; x++) { solver[offset] = target[x]; int pos = 0; for(int y = 0; y < len; y++) { if(x != y) { pass[pos] = target[y]; pos++; } } recurse(pass, len-1); } delete[] pass; } int main(int argc, char * argv[]) { if(argc != 2) { cout << "Syntax error. Usage: 'permute word'.\n\n"; exit(1); } size = strlen(argv[1]); ch = new char[size]; solver = new char[size+1]; for (int x = 0; x < size; x++) { ch[x] = argv[1][x]; } recurse(ch, size); delete[] ch; }