三色旗问题算法解析

2018-10-11  本文已影响55人  DoflaKaiGo
  • 问题: 在一根绳子上有一些红,白,蓝三种颜色的旗子,现在要把这些旗子按照 蓝,白,红的顺序排序.
    要求:旗子只能在绳子上移动,一次只能掉换两个旗子位置
代码:
#define BLUE 'b'
#define WHITE 'w'
#define RED 'r'
//交换 x,y位置的旗子
#define SWAP(x,y) { char temp; \
temp = color[x]; \
color[x] = color[y]; \
color[y] = temp;}

void threeColorFlag() {
    char color[] = {'b','r', 'w', 'b', 'w', 'w','b', 'r', 'b', 'w', 'r', '\0'};
    int wFlag = 0;
    int bFlag = 0;
   int  rFlag = strlen(color) - 1;
    int i;
    for(i = 0; i < strlen(color); i++) printf("%c ", color[i]);
    printf("\n");
    while(wFlag <= rFlag) {
        if(color[wFlag] == WHITE)
        wFlag++;
    else if(color[wFlag] == BLUE) {
        SWAP(bFlag, wFlag);
        bFlag++; wFlag++;
    }
    else {
        while(wFlag < rFlag && color[rFlag] == RED){
            rFlag--;
        }
        SWAP(rFlag, wFlag); rFlag--;
       }
    }
    for(i = 0; i < strlen(color); i++)
        printf("%c ", color[i]);
    printf("\n");
   }
上一篇 下一篇

猜你喜欢

热点阅读