//三色旗问题,也叫荷兰旗问题
//一根绳子上有一些蓝色、白色、红色的旗子,它们的排列顺序是随意的
//现要求把旗子分类并按照蓝色的旗子都在前,红色的旗子都在后,白色的旗子在中间的顺序排列
//你只能在一根绳子上操纵这一切,并且一次只能调换两个旗子
#include <stdio.h>
#define MAX_FLAG 30
#define BLUE 'B'
#define WHITE 'W'
#define RED 'R'
//这个算法就像进度条推进,先是红条占满,接着白条推进,最后蓝条推进
void DutchFlag(int n,char flagArr[MAX_FLAG])
{
int rflag=n-1,bflag=0,wflag=0;//假设一开始全是红旗,一条红.wflag始终指向当前检测的旗子
while (wflag<=rflag)
{
if (flagArr[wflag]==WHITE)//有白旗,白条开始往后推进
{
++wflag;
}
else if(flagArr[wflag]==BLUE)//有蓝旗,蓝条开始往后推进
{
char temp = flagArr[wflag];
flagArr[wflag] = flagArr[bflag];
flagArr[bflag] = temp;
++bflag;//bflag是蓝旗数,是蓝旗的结束点的后一位
++wflag;//同时白条也往后挪,wflag-bflag就是白旗数,wflag是白旗的结束点
}
else
{ //仅当当前wflag指的是红旗,而后面rflag指的不是红旗时才发生交换。如果前后指的都是红旗,则直接把rfl
荷兰旗问题(C语言实现)
最新推荐文章于 2025-03-11 08:31:56 发布