欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java之三色旗问题求解!

程序员文章站 2022-06-28 23:06:34
三色旗问题求解!问题:有一条绳子上面挂有白、红、蓝三种颜色的多面旗子,这些旗子的排列是无序的。* 现在要将绳子上的旗子按蓝、白、红三种颜色进行归类排列,* 但是只能在绳子上进行旗子的移动,并且每次只能调换两个旗子。* 问如何采用最少的步骤来完成三色旗的排列呢?效果如下:代码:/** * */package javaLearn;/** * @author Administrator *qq:1012885458 */public class 三色旗 {/* * 有...

三色旗问题求解!

问题:
有一条绳子上面挂有白、红、蓝三种颜色的多面旗子,这些旗子的排列是无序的。
* 现在要将绳子上的旗子按蓝、白、红三种颜色进行归类排列,
* 但是只能在绳子上进行旗子的移动,并且每次只能调换两个旗子。
* 问如何采用最少的步骤来完成三色旗的排列呢?
效果如下:
java之三色旗问题求解!
代码:

/**
 * 
 */
package javaLearn;

/**
 * @author Administrator
 *qq:1012885458
 */
public class 三色旗 {
	/*
	 * 有一条绳子上面挂有白、红、蓝三种颜色的多面旗子,这些旗子的排列是无序的。
	 * 现在要将绳子上的旗子按蓝、白、红三种颜色进行归类排列,
	 * 但是只能在绳子上进行旗子的移动,并且每次只能调换两个旗子。
	 * 问如何采用最少的步骤来完成三色旗的排列呢?*/
static	 int count=0;//定义对调的次数
static  char  color[]="rwbbwwbwbrbwr".toCharArray();	
static  int white ,red ,blue;
	 


//对调以及显示
static void swrap(char[] c,int x,int y) {
	int i;
	
	char temp;
	temp=c[x];
	c[x]=c[y];
	c[y]=temp;
	count++;//对调次数加一;
	
	
	System.out.printf("第%d次对调后:",count);
	for( i=0;i<color.length;i++) {
		System.out.printf(" %c",color[i]);	
	}
	System.out.printf("\n");
	
}

static void threeFlags() {
	while(color[white]=='b') {//blue  蓝旗
		blue++;//向后移动蓝旗
		white++;//向后移动白旗
	}
	while(color[red]=='r') {
		red--;//向前移动红旗
	}
	while(white<=red) {
		if(color[white]=='r') {
//红旗
			swrap(color,white,red);//对调红旗和白旗
			red--;
			while(color[red]=='r') {
				red--;   //向前移动红旗
			}
			
		}
		while(color[white]=='w') {
			white++;
		}
		if(color[white]=='b') {
			swrap(color,white,blue);
			blue++;
			white++;
		}
	}
}


	public static void main(String args[]) {
		int i;
		blue=0;	//指针位置初始化
		white=0;
		red=color.length-1;//红色指向最后
		count=0;
		System.out.println("三色旗问题求解!");
		System.out.printf("三色旗最初排列效果:\n");
		System.out.printf("            ");
		for(i=0;i<=red;i++) {
			System.out.printf(" %c",color[i]);
			
		}
		System.out.printf("\n");
		threeFlags();
		System.out.printf("通过%d次完成对调,最终的结果如下:\n",count);
		for(i=0;i<color.length;i++) {
			System.out.printf(" %c",color[i]);
		}
		System.out.printf(" \n");
		
		
	}

}

原理:

java之三色旗问题求解!

本文地址:https://blog.csdn.net/weixin_42590083/article/details/111999108