• dfs地图类问题


    ·P1443 - 马的遍历

     1 #include <iostream>
     2 #include <iomanip>
     3 #include <cstdio>
     4 #include <string.h>
     5 #include <algorithm>
     6 using namespace std;
     7 int nx[9]={2,2,-2,-2,1,-1,1,-1};
     8 int ny[9]={1,-1,1,-1,2,2,-2,-2};
     9 int ans[401][401];
    10 int n,tot=0,m,sx,sy,orz,sam;
    11 void dfs(int,int,int);
    12 int main()
    13 {
    14     memset(ans,-1,sizeof(ans));
    15     cin>>n>>m>>sx>>sy;
    16     dfs(sx,sy,0);
    17     for(int i=1;i<=n;i++)
    18     {
    19         for(int j=1;j<=m;j++)
    20             printf("%-5d",ans[i][j]);
    21         cout<<endl;
    22     }
    23 }
    24 void dfs(int x,int y,int step)
    25 {
    26     if(step>130) return;
    27     ans[x][y]=step;
    28     for(int i=0;i<8;i++)
    29     {
    30         if(y+ny[i]>0 && x+nx[i]>0 && y+ny[i]<=m && x+nx[i]<=n &&(ans[x+nx[i]][y+ny[i]]==-1||ans[x+nx[i]][y+ny[i]]>step+1))
    31         {
    32             dfs(x+nx[i],y+ny[i],step+1);
    33         }
    34     }
    35 }

    阈值这玩意真NB……

    ·P1219 - 八皇后

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int tot,a[17],ans[17],n;    //a表示第几行 ,1开始。
     4                         //mark用来存对角线、列的数据。
     5                         //mark[0]表示右上左下 
     6                         //mark[1]表示左上右下 
     7                         //mark[2]表示列 
     8 bool mark[3][50];
     9 void dfs(int);
    10 int main()
    11 {
    12     cin>>n;
    13     dfs(0);
    14     cout<<tot;
    15 }
    16 void dfs(int line)
    17 {
    18     if(line==n)
    19     {
    20         tot++;
    21         if(tot<=3)
    22         {
    23             for(int i=0;i<n;i++)
    24                 cout<<ans[i]+1<<" ";
    25             cout<<endl;
    26             return;
    27         }
    28         else return;
    29     }
    30     for(int i=0;i<n;i++)    //i表示列 ,line行 
    31     {
    32         if(mark[0][i]!=1&&mark[1][line-i+n]!=1&&mark[2][i+line]!=1)
    33                             //行没被用,对角线没有用 
    34         {
    35             ans[line]=i;
    36             mark[0][i]=1;mark[1][line-i+n]=1;mark[2][i+line]=1;
    37             dfs(line+1);
    38             mark[0][i]=0;mark[1][line-i+n]=0;mark[2][i+line]=0;
    39         }
    40     }
    41 }

    ·P1101 - 单词方阵

     1 #include <iostream>
     2 #include <algorithm>
     3 using namespace std;
     4 int nx[9]={1,-1,0,0,1,-1,1,-1},n,n2;
     5 int ny[9]={0,0,-1,1,1,-1,-1,1};
     6 char last,maps[101][101],ans[101][101],word[8]={'y','i','z','h','o','n','g'};
     7 bool temp[101][101];int flag=-1;
     8 void dfs(int,int,int);
     9 int main()
    10 {
    11     cin>>n;
    12     for(int i=1;i<=n;i++)
    13         for(int j=1;j<=n;j++)
    14         {
    15             ans[i][j]='*';
    16             cin>>maps[i][j];
    17         }n++;
    18     for(int i=1;i<=n;i++)
    19         for(int j=1;j<=n;j++)
    20         {
    21             if(maps[i][j]=='y')
    22             {
    23                 //cout<<"cheak!"<<i<<"  "<<j<<"  "<<maps[i][j]<<endl;
    24                 dfs(i,j,0);
    25             }
    26         }
    27     for(int i=1;i<=n;i++)
    28     {
    29         for(int j=1;j<=n;j++)
    30         {
    31             //if(temp[i][j]==1)
    32             
    33             
    34             cout<<ans[i][j];
    35             //else cout<<"*";
    36         }
    37         cout<<endl;
    38     }
    39 }
    40 void dfs(int x,int y,int step)
    41 {
    42     if(step==6)
    43     {
    44         temp[x][y]=1;
    45         for(int i=1;i<=n;i++)
    46             for(int j=1;j<=n;j++)
    47             {
    48                
    49                 if(temp[i][j]==1)
    50                     ans[i][j]=maps[i][j];
    51             }
    52         return;
    53     }
    54     if(step==0)
    55     {
    56     for(int i=0;i<9;i++)
    57     {
    58         //cout<<"x"<<x<<"  y"<<y<<"  x+nx"<<x+nx[i]<<"  y+ny"<<y+ny[i]<<"     x+~~"<<maps[x+nx[i]][y+ny[i]]<<endl;
    59         if(x+nx[i]>=1 && x+nx[i]<=n && y+ny[i]>=1 && y+ny[i]<=n && maps[x+nx[i]][y+ny[i]]==word[step+1])
    60         {
    61             flag=i;
    62             temp[x][y]=1;
    63             //ans[x][y]=maps[x][y];
    64             dfs(x+nx[i],y+ny[i],step+1);
    65             temp[x][y]=0;
    66         }
    67     }
    68     }
    69     else
    70         if(x+nx[flag]>=1 && x+nx[flag]<=n && y+ny[flag]>=1 && y+ny[flag]<=n && maps[x+nx[flag]][y+ny[flag]]==word[step+1])
    71         {       // cout<<"x"<<x<<"  y"<<y<<"  x+nx"<<x+nx[flag]<<"  y+ny"<<y+ny[flag]<<"     x+~~"<<maps[x+nx[flag]][y+ny[flag]]<<" step"<<step<<endl;
    72             temp[x][y]=1;
    73             //ans[x][y]=maps[x][y];
    74             dfs(x+nx[flag],y+ny[flag],step+1);
    75             temp[x][y]=0;
    76         }
    77         else flag=0;
    78 }

    ·P1605 - 迷宫

     1 #include <iostream>
     2 #include <algorithm>
     3 using namespace std;
     4 int nx[5]={1,-1,0,0};
     5 int ny[5]={0,0,1,-1};
     6 bool maps[6][6];
     7 bool temp[6][6];
     8 int n,m,t,sx,sy,fx,ans=0,fy,orzx,orzy;
     9 void dfs(int,int);
    10 int main()
    11 {
    12     cin>>n>>m>>t>>sx>>sy>>fx>>fy;
    13     for(int i=0;i<t;i++)
    14     {
    15         cin>>orzx>>orzy;
    16         maps[orzx][orzy]=1;
    17     }
    18     dfs(sx,sy);
    19     cout<<ans;
    20 }
    21 void dfs(int x,int y)
    22 {
    23     if(x==fx&&y==fy) {ans++;return;}
    24     for(int i=0;i<4;i++)
    25     {
    26         if(temp[x+nx[i]][y+ny[i]]==0 && maps[x+nx[i]][y+ny[i]]!=1&&x<=n && y<=m && x>=1 && y>=1)
    27         {
    28             temp[x][y]=1;
    29             //cout<<"x"<<x<<"   y"<<y<<endl;
    30             dfs(x+nx[i],y+ny[i]);
    31             temp[x][y]=0;
    32         }
    33     }
    34 }

     

    作者:tyqEmptySet
  • 相关阅读:
    java web 资源文件读取
    页面跳转
    验证码的随机图片
    spring 注解
    回文字符串系列问题
    【leetcode】Find All Anagrams in a String
    斐波那契数列
    【leetcode】 First Missing Positive
    Trapping Rain Water
    区间合并问题
  • 原文地址:https://www.cnblogs.com/tyqEmptySet/p/11183031.html
Copyright © 2020-2023  润新知