博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法分析之三色旗算法
阅读量:5884 次
发布时间:2019-06-19

本文共 1535 字,大约阅读时间需要 5 分钟。

一条绳子挂红白蓝三种颜色的旗子,且排列无序,现用程序把三种旗子同色归类,顺序为蓝-白-红,每次只能交换2面旗子,采用最少步骤完成。

算法描述:只需把红色和蓝色的旗子进行交换,红旗和篮旗都就位后,白旗自然就位。

1) 如果白旗所在位置的元素是白旗,表示该位置的元素应该在此,将white++,接着处理下一个旗子;

2) 如果white所在位置的元素是蓝旗,表示需将蓝旗与blue变量所在位置的元素对调,然后使blue++、white++,处理下一个旗子;

3) 如果white所在位置的元素是红旗,表示需要将红旗与red变量的元素对调,然后将red--,继续处理下一旗子。

 

 

1 namespace section10_threeFlags{ 2 int count; 3 char color[]="rwbwwbrbwr"; 4 int blue,white,red; 5 //exchange variable a and b 6 void swap(char * a, char *b){ 7     char temp; 8     int i; 9     temp = *a;10     *a=*b;11     *b=temp;12     count++;13     printf("the %dth order exchanged\n",count);14     for(i=0;i<(int)strlen(color);i++){15             printf("%c ",color[i]);16     }17     printf("\n");18 }19 void threeFlags(){20     while(color[white]=='b'){21         blue++;22         white++;23     }24     while(color[red]=='r'){25         red--;26     }27     while(white<=red){28         if(color[white]=='r'){29             swap(&color[white],&color[red]);30             red--;31             while(color[red]=='r'){32                 red--;33             }34         }35         while(color[white]=='w'){36             white++;37         }38         if(color[white]=='b'){39             swap(&color[white],&color[blue]);40             blue++;41             white++;42         }43     }44 }45 void runThreeFlags(){46     int i,len;47     blue=white=0;48     len=strlen(color);49     red=len-1;50     count=0;51     printf("The original flags' array are as follows:\n ");52     for(i=0;i

 

转载于:https://www.cnblogs.com/hoojjack/p/5208075.html

你可能感兴趣的文章
$digest already in progress 解决办法——续
查看>>
mysql 数据类型
查看>>
Ubuntu 设置当前用户sudo免密码
查看>>
ionic 调用手机的打电话功能
查看>>
怎么使用阿里云直播服务应用到现在主流直播平台中
查看>>
判断点是否在三角形内
查看>>
知行合一
查看>>
jmeter插件之jsonpath提取响应结果和做断言
查看>>
推荐系统那点事 —— 基于Spark MLlib的特征选择
查看>>
linux 下RTL8723/RTL8188调试记录(命令行)【转】
查看>>
[Contiki系列论文之1]Contiki——为微传感器网络而生的轻量级的、灵活的操作系统...
查看>>
Android 网络编程 记录
查看>>
微软同步发行Windows 10和Windows 10 Mobile系统更新
查看>>
Zeppelin的入门使用系列之使用Zeppelin运行shell命令(二)
查看>>
form表单下的button按钮会自动提交表单的问题
查看>>
那些年追过的......写过的技术博客
查看>>
python基础教程_学习笔记19:标准库:一些最爱——集合、堆和双端队列
查看>>
CSS魔法堂:Transition就这么好玩
查看>>
解决win7远程桌面连接时发生身份验证错误的方法
查看>>
C/C++ 多线程机制
查看>>