三色旗
来源:互联网 发布:网络繁忙请稍后再试 编辑:程序博客网 时间:2024/05/05 08:09
假设有一条绳子,上面有红、白、蓝三种颜色的旗子,起初绳子上的旗子颜色并没有顺序,您希望将之分类,并排列为蓝、白、红的顺序,要如何移动次数才会最少,注意您只能在绳子上进行这个动作,而且一次只能调换两个旗子。
解法:分别为三种颜色设置三个指针,起初B,W指向首部,R指向尾部,然后开始判断W所指向的。
1.如果是白色则不移动;
2.若是蓝色则BW互换;
3.若是红色则WR互换。
#include <stdio.h>#include <stdlib.h>#include <string.h>#define BLUE 'b'#define WHITE 'w'#define RED 'r'#define SWAP(x,y){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); 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"); return 0;}
0 0
- 三色旗
- 三色旗
- 三色旗
- 三色旗
- 三色旗
- 三色旗
- 三色旗问题
- 三色旗问题
- 趣味算法-三色旗
- 三色旗问题
- 三色旗排序问题
- 三色旗排序问题
- 三色旗问题
- 三色旗算法
- 三色旗算法实现
- 三色旗问题
- 三色旗问题
- 三色旗问题
- 将查询结果封装成类的更通用方法
- spring配置文件详解--真的蛮详细
- springMVC配置spring AOP功能中遇到的问题
- 2015国庆第一场——四川省赛练习
- ng 机器学习第二讲
- 三色旗
- IOS开发笔记-01按钮操作-05.IBAction&IBOutlet 06.加法计算器小结 07.关闭键盘
- 1 java程序设计概述
- Unity 下简易状态机的实现
- LeetCode题解:Flatten Binary Tree to Linked List
- codeforces 466D Increase Sequence DP
- LeetCode题解:Populating Next Right Pointers in Each Node
- equal和==的区别(原理讲解)
- Mysql命令大全