[C/C++ 演算法]-三色旗
剛才找資料時發現一個C/C++的教學網站,趕快發揮(C/P)的長才將它備份來,有需要的同好,歡迎來(C/P)一下^^。
拷貝來源:
http://openhome.cc/Gossip/AlgorithmGossip/
http://openhome.cc/Gossip/AlgorithmGossip/ThreeColorsFlags.htm
#include <stdio.h> #include <stdlib.h> #include <string.h>
#define SWAP_FLAGS(x, y) { char temp; \ temp = flags[x]; \ flags[x] = flags[y]; \ flags[y] = temp; }
void printFlags(char* flags) { int i; for(i = 0; i < strlen(flags); i++) { printf("%c ", flags[i]); } printf("\n"); }
void adjust(char* flags) { int w = 0; int b = 0; int r = strlen(flags) - 1; while(flags[w] == 'B' && w < strlen(flags)) { b++; w++; } while(flags[r] == 'R' && r > 0) { r--; } while(w <= r) switch(flags[w]) { case 'W': w++; break; case 'B': SWAP_FLAGS(b, w); b++; w++; break; case 'R': SWAP_FLAGS(r, w); r--; } }
int main() { char flags[] = {'R', 'W', 'B', 'W', 'W', 'B', 'R', 'B', 'W', 'R', '\0'};
printFlags(flags); adjust(flags); printFlags(flags);
return 0; }
|
沒有留言:
張貼留言