2013年9月3日 星期二

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

 


 


沒有留言:

張貼留言