简单搜索模板

版权声明:这些都是咸鱼Nova最后的挣扎,各位大佬转载请注明出处 https://blog.csdn.net/weixin_40883049/article/details/78877862

DFS求联通块

#include <iostream>
#include <cstdio>
#include <cstring>
//求联通块
using namespace std;
char arr[55][55];
int n,m,v[55][55];
int dx[]={0,0,-1,1},dy[]={-1,1,0,0};
void dfs(int x,int y)
{
    v[x][y]=1;
    int i;
    for(i=0;i<4;i++)
    {
        int cx=x+dx[i],cy=y+dy[i];
        if(cx>=0&&cx<n&&cy>=0&&cy<m&&!v[cx][cy]&&arr[cx][cy]=='.')
        {
            dfs(cx,cy);
        }
    }
}
int main()
{
    while(~scanf("%d%d",&n,&m))
    {
        int i,j,ans=0;
        memset(arr,0,sizeof(arr));
        memset(v,0,sizeof(v));
        for(i=0;i<n;i++)
        {
            scanf("%s",arr[i]);
        }
        for(i=0;i<n;i++)
        {
            for(j=0;j<m;j++)
            {
                if(arr[i][j]=='.'&&!v[i][j])
                {
                    dfs(i,j);
                    ans++;
                }
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}


BFS求最短路径

#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
//bfs求最短路径
using namespace std;
char arr[55][55];
int n,m,v[55][55],sx,sy,ex,ey,dx[]={0,0,-1,1},dy[]={-1,1,0,0};
struct node
{
    int x,y,step;
};

int bfs()
{
   queue<node> q;
   v[sx][sy]=1;
   node st;
   st.x=sx,st.y=sy,st.step=0;
   q.push(st);
   while(!q.empty())
   {
       node cur=q.front();
       q.pop();
       if(cur.x==ex&&cur.y==ey)
       {
           return cur.step;
       }
       int i;
       for(i=0;i<4;i++)
       {
           node nxt;
           nxt.x=cur.x+dx[i],nxt.y=cur.y+dy[i],nxt.step=cur.step+1;
           if(nxt.x>=0&&nxt.x<n&&nxt.y>=0&&nxt.y<m&&!v[nxt.x][nxt.y]&&arr[nxt.x][nxt.y]!='#')
           {
               v[nxt.x][nxt.y]=1;
               q.push(nxt);
           }
       }
   }
}

int main()
{
    while(~scanf("%d%d",&n,&m))
    {
        int i,j,ans=0;
        memset(arr,0,sizeof(arr));
        memset(v,0,sizeof(v));
        for(i=0;i<n;i++)
        {
            scanf("%s",arr[i]);
        }
        for(i=0;i<n;i++)
        {
            for(j=0;j<m;j++)
            {
                if(arr[i][j]=='S')
                {
                    sx=i;
                    sy=j;
                }
                else if(arr[i][j]=='E')
                {
                    ex=i;
                    ey=j;
                }
            }
        }
        printf("%d\n",bfs());
    }
    return 0;
}




猜你喜欢

转载自blog.csdn.net/weixin_40883049/article/details/78877862