• DFS / BFS题目栏 (来自一个队友退役后,不得不,重拾图论的选手的叹息)


    水题栏:虽然一遍过(毕竟水题),但是还是把代码贴上。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<ctime>
     4 #include<cstring>
     5 #include<cstdlib>
     6 #include<cmath>
     7 #include<queue>
     8 #include<stack>
     9 #include<map> 
    10 #include<algorithm>
    11 #define Max(a,b) ((a)>(b)?(a):(b))
    12 #define Min(a,b) ((a)<(b)?(a):(b))
    13 #define Mem0(x) memset(x,0,sizeof(x))
    14 #define Mem1(x) memset(x,-1,sizeof(x))
    15 #define MemX(x) memset(x,0x3f,sizeof(x))
    16 using namespace std;
    17 typedef long long ll;
    18 const int inf=0x3f3f3f;
    19 const double pi=acos(-1.0);
    20 
    21 int ans,n,k,a[30];
    22 bool vis[30];
    23 bool check(int n)
    24 {
    25     if (n==1)
    26         return false;
    27     for (int i=2;i*i<=n;i++){
    28         if (n%i==0)
    29             return false;
    30     }
    31     return true;
    32 }
    33 void dfs(int pos,int index,int sum)
    34 {
    35     if (index==k){
    36         if (check(sum)){        
    37             ans++;
    38         }        
    39         return ;
    40     }
    41     if (pos>n)
    42         return ;
    43     for (int i=pos;i<=n;i++){
    44         if (vis[i]==false){
    45             vis[i]=true;
    46             dfs(i+1,index+1,sum+a[i]);
    47             vis[i]=false;
    48         }
    49     }
    50 }
    51 int main()
    52 {
    53     ans=0;
    54     cin>>n>>k;
    55     for (int i=1;i<=n;i++){
    56         cin>>a[i];
    57     }
    58     dfs(1,0,0);
    59     cout<<ans<<endl;
    60     return 0;
    61 }

      ***************************************************************分割线***************************************************************

     

       这里为了图时间的简便,可以从最外围的0开始搜索,被搜到的全部赋值为-1,等搜索结束后剩下的零就全是应被涂成2的。

    最后记得输出的时候,被标记为-1的点按0输出。

     

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<ctime>
     4 #include<cstring>
     5 #include<cstdlib>
     6 #include<cmath>
     7 #include<queue>
     8 #include<stack>
     9 #include<map> 
    10 #include<algorithm>
    11 #define Max(a,b) ((a)>(b)?(a):(b))
    12 #define Min(a,b) ((a)<(b)?(a):(b))
    13 #define Mem0(x) memset(x,0,sizeof(x))
    14 #define Mem1(x) memset(x,-1,sizeof(x))
    15 #define MemX(x) memset(x,0x3f,sizeof(x))
    16 using namespace std;
    17 typedef long long ll;
    18 const int inf=0x3f3f3f;
    19 const double pi=acos(-1.0);
    20 
    21 
    22 int n;
    23 struct s{
    24     int x,y,num;
    25 }mp[50][50];
    26 const int dir[4][2]={1,0,0,1,-1,0,0,-1};
    27 queue <s> q;
    28 void init()
    29 {
    30     while (!q.empty())
    31         q.pop();
    32     cin>>n;
    33     for (int i=1;i<=n;i++){
    34         for (int j=1;j<=n;j++){
    35             cin>>mp[i][j].num;
    36             mp[i][j].x=i;
    37             mp[i][j].y=j;
    38             if ((i==1||i==n||j==1||j==n)&&mp[i][j].num==0)
    39                 q.push(mp[i][j]);
    40         }
    41     }
    42     return ;
    43 }
    44 void bfs()
    45 {
    46     s node,temp;
    47     while (!q.empty()){
    48         node=q.front();
    49         mp[node.x][node.y].num=-1;
    50         for (int k=0;k<4;k++){
    51             temp.x=node.x+dir[k][0];
    52             temp.y=node.y+dir[k][1];
    53             if (temp.x<1||temp.y<1||temp.x>n||temp.y>n||mp[temp.x][temp.y].num==1)
    54                 continue;
    55             else if (mp[temp.x][temp.y].num==0){
    56                 q.push(temp);
    57             }
    58         }
    59         q.pop();
    60     }
    61     return ;
    62 }
    63 void Print()
    64 {
    65     for (int i=1;i<=n;i++){
    66         for (int j=1;j<=n;j++){
    67             if (mp[i][j].num==-1)
    68                 cout<<"0 ";
    69             else if (mp[i][j].num==0)
    70                 cout<<"2 ";
    71             else
    72                 cout<<"1 "; 
    73         }
    74         cout<<endl;
    75     }
    76 }
    77 int main()
    78 {
    79     init();
    80     bfs();
    81     Print();
    82     return 0;
    83 }

      ***************************************************************分割线***************************************************************

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<ctime>
     4 #include<cstring>
     5 #include<cstdlib>
     6 #include<cmath>
     7 #include<queue>
     8 #include<stack>
     9 #include<map> 
    10 #include<algorithm>
    11 #define Max(a,b) ((a)>(b)?(a):(b))
    12 #define Min(a,b) ((a)<(b)?(a):(b))
    13 #define Mem0(x) memset(x,0,sizeof(x))
    14 #define Mem1(x) memset(x,-1,sizeof(x))
    15 #define MemX(x) memset(x,0x3f,sizeof(x))
    16 using namespace std;
    17 typedef long long ll;
    18 const int inf=0x3f3f3f;
    19 const double pi=acos(-1.0);
    20 
    21 int n,ans[20];
    22 bool vis[20];
    23 void Print()
    24 {
    25     for (int i=1;i<=n;i++){
    26         printf("%5d",ans[i]);
    27     }
    28     cout<<endl;
    29     return ;
    30 }
    31 void dfs(int index)
    32 {
    33     if (index==n+1){
    34         Print();
    35         return ;
    36     }
    37     for (int i=1;i<=n;i++){
    38         if (vis[i]==false){
    39             vis[i]=true;
    40             ans[index]=i;
    41             dfs(index+1);
    42             vis[i]=false;
    43         }
    44     }
    45     return ;
    46 }
    47 int main()
    48 {
    49     cin>>n;
    50     dfs(1);
    51     return 0;
    52 }

       ***************************************************************分割线***************************************************************

    在这里只需要明白DFS序问题,无论是  先 / 中 / 后 序排列,对于一颗完整的子树,他们的序列都是连着的。

      1 #include<iostream>

     2 #include<cstdio>
     3 #include<ctime>
     4 #include<cstring>
     5 #include<cstdlib>
     6 #include<cmath>
     7 #include<queue>
     8 #include<stack>
     9 #include<map> 
    10 #include<algorithm>
    11 #define Max(a,b) ((a)>(b)?(a):(b))
    12 #define Min(a,b) ((a)<(b)?(a):(b))
    13 #define Mem0(x) memset(x,0,sizeof(x))
    14 #define Mem1(x) memset(x,-1,sizeof(x))
    15 #define MemX(x) memset(x,0x3f,sizeof(x))
    16 using namespace std;
    17 typedef long long ll;
    18 const int inf=0x3f3f3f;
    19 const double pi=acos(-1.0);
    20 
    21 char s[30],t[30];
    22 int len;
    23 void btree(int l,int r,int L,int R)
    24 {
    25     if (l>r)
    26         return ;
    27     cout<<t[R];
    28     int cnt=l;
    29     while (s[cnt]!=t[R])
    30         cnt++;
    31     int temp=cnt-l;
    32     btree(l,cnt-1,L,L+temp-1);
    33     btree(cnt+1,r,L+temp,R-1);
    34 }
    35 int main()
    36 {
    37     cin>>s+1>>t+1;
    38     len=strlen(s+1);
    39     btree(1,len,1,len);
    40 }

       ***************************************************************分割线***************************************************************

  • 相关阅读:
    HTML5就是现在:深入了解Polyfills
    dot.js-js模板引擎使用,教程,入门
    js操作dom对象
    JavaScript中this详解
    浅谈JavaScript中的string拥有方法的原因
    函数定义方式
    Jquery的跨域调用
    数据结构与算法之美-排序(下)
    CLR via C#学习笔记-第十三章-定义接口、继承接口
    CLR via C#学习笔记-第十二章-可验证性和约束
  • 原文地址:https://www.cnblogs.com/q1204675546/p/11588049.html
Copyright © 2020-2023  润新知