三色旗
以最少次数移动使三种颜色的每一种颜色的旗子在一块
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define BLUE 'b'//蓝色
#define WHITE 'w'//白色
#define RED 'r'//红色
void SWAP(int x,int y,char *color) {
char temp;
temp=color[x];
color[x]=color[y];
color[y]=temp;
}
int main(){
char color[]={'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,color);
bFlag++;
wFlag++;
}
else{
while(wFlag<rFlag&&color[rFlag]==RED)
rFlag--;
SWAP(rFlag,wFlag,color);
rFlag--;
}
}
for(i=0;i<strlen(color);i++)
printf("%c",color[i]);
printf("\n");
return 0;
}