zoukankan      html  css  js  c++  java
  • 集训·Mayan游戏

    #include<bits/stdc++.h>
    using namespace std;
    const int N=10;
    int n,mp[N][N],u,ansx[N],ansy[N],ansd[N];
    inline void confirm()
    {
    	bool flag=true;
    	for(int i=1;i<=5;i++)if(mp[i][1])flag=false;
    	if(flag)for(int i=1;i<=n;i++)
    	cout<<ansx[i]-1<<" "<<ansy[i]-1<<" "<<ansd[i]<<endl; 
    	if(flag)exit(0);
    }
    inline bool xiao()
    {
    	bool xi[N][N],flag=false;
    	memset(xi,0,sizeof(xi)); 
    	for(int i=1;i<=5;i++)for(int j=1;mp[i][j];j++)
    	{
    		int r;
    		for(r=i+1;r<=5;r++)if(mp[i][j]!=mp[r][j])break;
    		if(r-i>=3)for(int k=i;k<r;k++)xi[k][j]=true;
    		for(r=j+1;r<=7;r++)if(mp[i][j]!=mp[i][r])break;
    		if(r-j>=3)for(int k=j;k<r;k++)xi[i][k]=true;
    	}
    	for(int i=1;i<=5;i++)for(int j=1;j<=7;j++)
    	if(xi[i][j])mp[i][j]=0,flag=true;
    	if(!flag)return false;
    	for(int i=1;i<=5;i++)for(int j=1;j<=7;j++)
        if(!mp[i][j])
    	{ 
            int k=j+1;
            for(;k<=7;k++)if(mp[i][k])break;
            mp[i][j]=mp[i][k];mp[i][k]=0;
        }
    	return true;
    }
    inline void dfs(int now)
    {
    	for(int i=1;i<=5;i++)for(int j=1;mp[i][j];j++)
    	{
    		if(i!=5&&mp[i][j]!=mp[i+1][j]&&mp[i+1][j])
    		{
    			int tp[N][N];
    			memcpy(tp,mp,sizeof(tp));
    			swap(mp[i][j],mp[i+1][j]);
    			ansx[now]=i;ansy[now]=j;ansd[now]=1;
    			while(xiao()){}
    			if(now==n)confirm();
    			else dfs(now+1);
    			memcpy(mp,tp,sizeof(mp));
    		}
    		if(i!=5&&!mp[i+1][j])
    		{
    			int tp[N][N];
    			memcpy(tp,mp,sizeof(tp));
    			int k;
                for(k=j-1;k>=1;k--)if(mp[i+1][k])break;
            	mp[i+1][++k]=mp[i][j];mp[i][j]=0;
            	for(int e=j;e<=6;e++)
    			{mp[i][e]=mp[i][e+1];mp[i][e+1]=0;} 
    			ansx[now]=i;ansy[now]=j;ansd[now]=1;
    			while(xiao()){}
    			if(now==n)confirm();
    			else dfs(now+1);
    			memcpy(mp,tp,sizeof(mp));
    		}
    		if(i!=1&&!mp[i-1][j])
    		{
    			int tp[N][N];
    			memcpy(tp,mp,sizeof(tp));
    			int k;
                for(k=j-1;k>=1;k--)if(mp[i-1][k])break;
                mp[i-1][++k]=mp[i][j];mp[i][j]=0;
                for(int e=j;e<=6;e++)
    			{mp[i][e]=mp[i][e+1];mp[i][e+1]=0;} 
    			ansx[now]=i;ansy[now]=j;ansd[now]=-1;
    			while(xiao()){}
    			if(now==n)confirm();
    			else dfs(now+1);
    			memcpy(mp,tp,sizeof(mp));
    		}
    	}
    }
    int main()
    {
    	ios::sync_with_stdio(false);
    	cin>>n;
    	for(int i=1;i<=5;i++)
    	{
    		int tmp=0;
    		while(cin>>u){if(!u)break;mp[i][++tmp]=u;}
    	}
    	dfs(1);
    	cout<<-1<<endl;
    	return 0;
    }
    
  • 相关阅读:
    linux C++ 通讯架构(二)linux相关
    TCP/IP协议分层详解
    公网Ip和私网ip
    IP地址的含义
    IP地址,子网掩码、默认网关,DNS服务器是什么意思?
    Iptables&Firewalld防火墙
    Linux服务器性能评估与优化
    Linux性能优化
    基于mysql-proxy实现mysql读写分离
    linux下搭建NFS服务器
  • 原文地址:https://www.cnblogs.com/Ace-MYX/p/11678639.html
Copyright © 2011-2022 走看看