zoukankan      html  css  js  c++  java
  • [bzoj] 1085 骑士精神 || ID-DFS

    原题

    找到最少的步数成为目标状态。


    IDDFS(限制层数的dfs)即可

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int t,n,m,disx[10]={0,1,2,2,1,-1,-2,-2,-1},disy[10]={0,2,1,-1 ,-2,-2,-1,1,2},posx,posy,ans;
    char a[8][8];
    
    int read()
    {
        int ans=0,fu=1;
        char j=getchar();
        for (;(j<'0' || j>'9') && j!='-';j=getchar()) ;
        if (j=='-') j=getchar(),fu=-1;
        for (;j>='0' && j<='9';j=getchar()) ans*=10,ans+=j-'0';
        return ans*fu;
    }
    
    int chk()
    {
        int cnt;
        if (a[3][3]!='*') cnt=1;
        for (int i=1;i<=5;i++)
    	for (int j=i+(i>=3);j<=5;j++)
    	    if (a[i][j]=='0') cnt++;
        for (int i=5;i>=1;i--)
    	for (int j=1;j<=i-(i<=3);j++)
    	    if (a[i][j]=='1') cnt++;
        return cnt;
    }
    
    bool check()
    {
        for (int i=1;i<=5;i++)
    	for (int j=i+(i>=3);j<=5;j++)
    	    if (a[i][j]=='0') return 0;
        for (int i=5;i>=1;i--)
    	for (int j=1;j<=i-(i<=3);j++)
    	    if (a[i][j]=='1') return 0;
        return 1;
    }
    
    bool illegal(int x,int y)
    {
        if (x<1 || y<1) return 1;
        if (x>5 || y>5) return 1;
        return 0;
    }
    
    void dfs(int x,int px,int py)
    {
        if (!x)
        {
    	if (px==3 && py==3 && check()) ans=1;
    	return ;
        }
        for (int i=1;i<=8;i++)
        {
    	int vx,vy;
    	vx=px+disx[i];
    	vy=py+disy[i];
    	if (illegal(vx,vy)) continue;
    	swap(a[vx][vy],a[px][py]);
    	if (chk()<=x) dfs(x-1,vx,vy);
    	swap(a[vx][vy],a[px][py]);
        }
    }
    
    int main()
    {
        t=read();
        while (t--)
        {
    	ans=0;
    	for (int i=1;i<=5;i++)
    	{
    	    for (int j=1;j<=5;j++)
    	    {
    		a[i][j]=getchar();
    		if (a[i][j]=='*') posx=i,posy=j;
    	    }
    	    getchar();
    	}
    	for (int i=0;i<=15;i++)
    	{
    	    dfs(i,posx,posy);
    	    if (ans)
    	    {
    		printf("%d
    ",i);
    		break;
    	    }
    	}
    	if (!ans) printf("-1
    ");
        }
        return 0;
    }
    
  • 相关阅读:
    使用slot-scope复制vue中slot内容
    pre-commit钩子,代码质量检查
    vue 顶级组件
    Vue源码探究-事件系统
    vue 配置多页面应用
    vuex commit保存数据技巧
    在VUE中,关于CKEditor使用
    使用el-checkbox实现全选,点击失效没有反应
    vue组件之间的通信
    不做Next,争做Nest——庆科首届智能硬件创新设计大赛产生决赛12强
  • 原文地址:https://www.cnblogs.com/mrha/p/8018578.html
Copyright © 2011-2022 走看看