zoukankan      html  css  js  c++  java
  • 棋子换位

    有n个棋子A,n个棋子B,在棋盘上排成一行。 它们中间隔着一个空位,用“.”表示,比如:

    AAA.BBB

    现在需要所有的A棋子和B棋子交换位置。 移动棋子的规则是:

    1. A棋子只能往右边移动,B棋子只能往左边移动。
    2. 每个棋子可以移动到相邻的空位。
    3. 每个棋子可以跳过相异的一个棋子落入空位(A跳过B或者B跳过A)。

    AAA.BBB 可以走法: 移动A ==> AA.ABBB 移动B ==> AAAB.BB

    跳走的例子: AA.ABBB ==> AABA.BB

    以下的程序完成了AB换位的功能,请仔细阅读分析源码,填写划线部分缺失的内容。

    #include <stdio.h>
    #include <string.h>
    
    void move(char* data, int from, int to)
    {
    	data[to] = data[from];
    	data[from] = '.';
    }
    
    int valid(char* data, int k)
    {
    	if(k<0 || k>=strlen(data)) return 0;
    	return 1;
    }
    	
    void f(char* data)
    {
    	int i;
    	int tag;
    	int dd = 0; // 移动方向
    	
    	while(1){
    		tag = 0;
    		for(i=0; i<strlen(data); i++){
    			if(data[i]=='.') continue;
    			if(data[i]=='A') dd = 1;
    			if(data[i]=='B') dd = -1;
    			
    			if(valid(data, i+dd) && valid(data,i+dd+dd) 
    			&& data[i+dd]!=data[i] && data[i+dd+dd]=='.'){ 
    			//如果能跳... 
    				move(data, i, i+dd+dd);
    				printf("%s
    ", data);
    				tag = 1;
    				break;
    			}
    		}
    		
    		if(tag) continue;
    		
    		for(i=0; i<strlen(data); i++){
    			if(data[i]=='.') continue;
    			if(data[i]=='A') dd = 1;
    			if(data[i]=='B') dd = -1;			
    				 
    			if(valid(data, i+dd) && data[i+dd]=='.'){ 
    			// 如果能移动...
    				if( (25分) ) continue;  //填空位置 
    				move(data, i, i+dd);
    				printf("%s
    ", data);
    				tag = 1;
    				break;
    			}
    		}
    		
    		if(tag==0) break;					
    	}
    }
    	
    int main()
    {
    	char data[] = "AAA.BBB";	
    	f(data);
    	return 0;
    }
    
    

    注意:只提交划线部分缺少的代码,不要复制已有代码或填写任何多余内容。

    首先搞清楚题意一开始AAA.BBB要求变成BBB.AAA,具体可以怎么操作题目说的很清楚,而且还给加了注释,填空位置显然是移动到相邻位置不行的情况,在纸上画一画能找到规律。

  • 相关阅读:
    FreeMarker中List排序
    Mingyang.net:为什么不将Bean定义在Action参数中?
    长春市学校标识码
    java解析html的table
    java发送http的get、post请求【备忘】
    CentOS安装CAS 5.3.4服务端
    设置JAVA环境变量
    CentOS安装Maven
    为tomcat8安装Native library
    openresty用naxsi防xss、SQL注入
  • 原文地址:https://www.cnblogs.com/8023spz/p/10546134.html
Copyright © 2011-2022 走看看