[算法系列]三色旗

来源:互联网 发布:淘宝退货率怎么看 编辑:程序博客网 时间:2024/05/01 01:21

写在前面:

     我是一个小小的程序员,我的野心是成为一个全栈工程师!!!


正文:

    这是我用来记录学习算法的一个系列。希望能与所有人共进步。

    这个算法小心一点,有点绕脑


/******************************** * * 算法:三色旗 * * 问题: 假设有一条绳子,上面有红、白、蓝三种颜色的旗子,起初绳子上的旗子颜色并没有顺序,您 *      希望将之分类,并排列为蓝、白、红的顺序,要如何移动次数才会最少,注意您只能在绳子上 *      进行这个动作,而且一次只能调换两个旗子。 * * 解决: 在一个绳子上移动,从开头起,以白旗为中心,遇到蓝旗就放白旗左边,红旗放右边。。 * * * * * * ********************************/#include <stdio.h>#include <stdlib.h>#include <string.h>#define Blue 'B'#define White 'W'#define Red 'R'int main(){    char color[] = {'W','R','W','B','W','B','W','R','B','B','W'}; //这是绳子上的旗子们..    //wFlag 表示白旗的位置,bFlag表示蓝旗的位置,rFlag表示红旗的位置,设定白旗和蓝旗从最左边开始,红旗位置从最右边开始    int wFlag = 0,bFlag = 0,rFlag = strlen(color)-1;    int i;    printf("排序前绳子上的旗子顺序为:");    for(i=0;i<strlen(color);i++)        printf("%c ",color[i]);    printf("\n");    //排序    //因为最后以白旗为中心,红旗在白旗的右边,所以当白旗的位置还未大于红旗的位置时,表示旗子还没排好    while(wFlag <= rFlag) {        if(color[wFlag] == White) //如果是白旗            wFlag++; //则白旗阵营+1,位置向前移后一位        else            if(color[wFlag]==Blue) {//如果是蓝旗                swap(&color[bFlag], &color[wFlag]);//则将蓝旗放在白旗左边                wFlag++;bFlag++; //同时分别+1            } else {//如果是红旗                    while(wFlag<rFlag && color[rFlag]==Red) //如果最右边这个是红旗,则不用交换旗子的位置                        rFlag--; //红旗的位置向前移动一位                    swap(&color[rFlag],&color[wFlag]); //此时把前面的红旗和绳子另一端的红旗前一个位置对掉                    rFlag--; //此时红旗又向前移动一位            }    }    printf("排序后绳子上的旗子排序为:");    for(i=0;i<strlen(color);i++)        printf("%c ",color[i]);    printf("\n");    return 0;}/** * 交换位置函函数 * */ void swap(char* x , char* y) {    char temp;    temp = *x;    *x = *y;    *y = temp; }

提示:如果不能很好的理解其中的运算过程,就自己按照给出的解决方法手动排一遍

小尾巴:

    吾王剑之所指,即吾等身之所向。
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 红米手机恢复出厂设置出错了怎么办 红米恢复出厂设置出错了怎么办 应聘工作上当收押金了该怎么办 红米1s密码忘了怎么办 红米1s刷机后开不了机怎么办 红米2a耗电超快怎么办 红米2a手机耗电快怎么办 红米4x触屏失灵怎么办 苹果恢复出厂设置后密码忘记怎么办 红米1s忘记密码锁屏了怎么办 红米3手机忘记解锁图案怎么办 小米5x手机录屏失败怎么办 红米4x手机wif信号不好怎么办 红米4x屏幕换了截屏不好使怎么办 红米手机2a卡慢怎么办? 红米手机连接无线网信号不好怎么办 小米4用久了很卡怎么办 红米4a关不了机怎么办 红米手机屏幕锁了忘记密码怎么办 手机锁了忘记密码怎么办 红米 红米4a开不开机怎么办 红米显示小人开不了机怎么办 红米手机找回微信密码怎么办 红米手机密码忘了怎么办数字锁 红米1s忘了密码怎么办 红米手机下面三个键失灵怎么办 红米note手机没声音了怎么办 魅蓝3s被锁了怎么办 小米5x的4g网速慢怎么办 红米一体机与后盖有裂缝怎么办? 红米4x喇叭坏了怎么办 红米4x电池坏了怎么办 小米电视4a开不了机怎么办 小米x4手机下面三个键失灵怎么办 红米4a一直重启怎么办 红米4a手机一直关机重启怎么办 红米5A手机4G信号差怎么办 红米4x手机黑屏打不开怎么办 红米手机前置摄像头用不了怎么办 红米4a手机电池不耐用怎么办 红米6全网通联通网络不好怎么办