[C/C++ 演算法]-三色旗

[C/C++ 演算法]-三色旗

[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;
} 
 

 

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *