zoukankan      html  css  js  c++  java
  • zzulioj1922:棋盘

    Description

    给定一个4*4的01棋盘,1代表棋子,0代表空格,棋子1每次可以移动到相邻上下左右四个位置的空格。
    然后再给定你目标棋盘,问你最少在多少步能把当前棋盘变成目标棋盘状态。

    Input

    第一行输入一个整数t,代表有t组测试数据。
    接下来给出只有0和1的4*4的当前棋盘和4*4的目标棋盘,中间有一个空行。

    Output

    输出一个整数表示最小的步数,若不能到达输出-1.

    Sample Input

    100010011110011111011110100001101

    Sample Output

    8

    查找出棋盘中没有重合的1的位置 从上到下 从左到右搜索 本题数据较小(4*4)可以直接暴力搜索

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    char map1[4][4],map2[4][4];
    int  vis1[4][4],vis2[4][4]; 
    int main()
    {
    	int t;
    	scanf("%d",&t);
    	while(t--)
    	{
    		memset(vis1,0,sizeof(vis1));
    		memset(vis2,0,sizeof(vis2));
    		for(int i=0;i<4;i++)
    		{
    		    scanf("%s",&map1[i]);
    		}
    		for(int i=0;i<4;i++)
    		{
    		   scanf("%s",&map2[i]);
    		}
            int sum1=0,sum2=0;
            for(int i=0;i<4;i++)
            {
            	for(int j=0;j<4;j++)
            	{
            		if(map1[i][j]=='1'&&map2[i][j]=='0')
            		{
            			sum1++;
            			vis1[i][j]=1;
    				}
    				else 
    				{
    					  if(map1[i][j]=='0'&&map2[i][j]=='1')
    			     	{
    					  sum2++;
    					  vis2[i][j]=1;
    			      	}
    				}
    			
    			}
    		}
    		if(sum1!=sum2)
    		{
    			printf("-1
    ");
    			continue;
    		}
    		if(sum1==0&&sum2==0)
    		{
    			printf("0
    ");
    			continue;
    		}
    		int sum=0;
    		for(int i=0;i<4;i++)
    		{
    			for(int j=0;j<4;j++)
    			{
    			
    				if(vis1[i][j]==1)
    				{
    					int ii,jj,minn=50;
    					for(int a=0;a<4;a++)
    					{
    						for(int b=0;b<4;b++)
    						{
    							if(vis2[a][b]==1)
    							{
    								if( ( abs(i-a)+abs(j-b) )<minn)
    								{
    									minn=abs(i-a)+abs(j-b);
    									ii=a,jj=b;
    								}
    							}
    						}
    					}
    				vis1[i][j]=0;
    				vis2[ii][jj]=0;
    				sum+=minn;
    				}
    			}
    		}
    		printf("%d
    ",sum);
    	}
    	return 0;
    }


  • 相关阅读:
    闭包函数 (字符编码,文件处理,函数基础总结)
    函数参数详解
    文件处理及函数基础
    文件处理高级
    面向对象----反射
    正则表达式与re模块
    常用模块
    模块和包
    内置函数与匿名函数
    HDU
  • 原文地址:https://www.cnblogs.com/kingjordan/p/12027047.html
Copyright © 2011-2022 走看看