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,具体可以怎么操作题目说的很清楚,而且还给加了注释,填空位置显然是移动到相邻位置不行的情况,在纸上画一画能找到规律。

  • 相关阅读:
    C#循环页面form中控件
    鼠标放到按钮上页面样式发生变化
    access INSERT INTO 语句的语法错误
    更改水晶报表数据源
    C# byte[]与string互转
    禁用右键
    showModalDialog IE9 报错
    ListBox 循环删除当前项
    showModalDialog 刷新本页面,不重新发送信息,则无法刷新网页,Page_PreRender
    敏捷模式开发(转)
  • 原文地址:https://www.cnblogs.com/8023spz/p/10546134.html
Copyright © 2011-2022 走看看