zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    html 上传图片前预览
    php获取当月天数及当月第一天及最后一天、上月第一天及最后一天实现方法
    php 计算 pdf文件页数
    php 获取半年内每个月的订单数量, 总价, 月份
    php 获取两个数组之间不同的值
    小程序支付功能
    关于nginx的Job for nginx.service failed because the control process exited with error code.错误
    linux 安装 Apollo
    MongoDB待续。。。
    ABP vNext...待续
  • 原文地址:https://www.cnblogs.com/tyqEmptySet/p/11183031.html
Copyright © 2011-2022 走看看