6 条题解

  • 1
    @ 2026-3-11 20:08:50

    猎奇不猎奇?!

    #include <bits/stdc++.h>
    using namespace std;
    int x,y,mx,my,dx[8]={1,1,1,0,0,-1,-1,-1},dy[8]={-1,0,1,-1,1,-1,0,1},ans=0;
    int main(){
        cin>>x>>y>>mx>>my;
        vector<string>g(y);
        for(int i=y-1;i>=0;--i) cin>>g[i];
        queue<tuple<int,int,int>>q;
        q.push({my-1,mx-1,0});
        g[my-1][mx-1]='M';
        while(!q.empty()){
            auto [i,j,d]=q.front(); q.pop();
            ans=d;
            for(int k=0;k<8;++k){
                int ni=i+dx[k], nj=j+dy[k];
                if(ni>=0&&ni<y&&nj>=0&&nj<x&&g[ni][nj]=='.'){
                    g[ni][nj]='M';
                    q.push({ni,nj,d+1});
                }
            }
        }
        cout<<ans;
        return 0;
    }
    

    直接拿下最短记录!!!

    抄的是GAY?!

  • 1
    @ 2023-1-6 11:59:11
    #include<iostream>
    #include<string.h>
    #include<queue>
    using namespace std;
    struct id
    {
    	int x,y,s;
    };
    queue<id>q;
    int n,m,x,y,sx,sy,ans,k;
    int xx[8]={-1,-1,-1,0,0,1,1,1};
    int yy[8]={-1,0,1,-1,1,-1,0,1};
    bool qp[110][110];
    char ch;
    int main()
    {
    	memset(qp,false,sizeof(qp));
    	cin>>m>>n>>x>>y;
    	for(int i=1;i<=n;i++)
    	{
    		for(int j=1;j<=m;j++)
    		{
    			cin>>ch;
    			if(ch=='.')qp[i][j]=true;
    		}
    	}
    	sy=x;
    	sx=n-y+1;
    	q.push(id{sx,sy,0});
    	qp[sx][sy]=false;
    	while(!q.empty())
    	{
    		int tx=q.front().x;
    		int ty=q.front().y;
    		ans=q.front().s;
    		q.pop();
    		for(int i=0;i<8;i++)
    		{
    			int nx=tx+xx[i];
    			int ny=ty+yy[i];
    			if(qp[nx][ny])
    			{
    				q.push(id{nx,ny,ans+1});
    				qp[nx][ny]=false;
    			}
    		}
    	}
    	cout<<ans;
    	return 0;
    }
    
    • 1
      @ 2022-7-28 9:46:15

      不用广搜,直接暴力居然可以AC

      #include <iostream>
      using namespace std;
      
      char a[101][101];
      int m,n,x,y;
      
      void kuo()
      {
      	for(int i = 1;i <= n;i++)
      	{
      		for(int j = 1;j <= m;j++)
      		{
      			if(a[i][j] == 'M')
      			{
      				if(a[i][j + 1] == '.') a[i][j + 1] = 'A';
      				if(a[i][j - 1] == '.') a[i][j - 1] = 'A';
      				if(a[i + 1][j] == '.') a[i + 1][j] = 'A';
      				if(a[i - 1][j] == '.') a[i - 1][j] = 'A';
      				
      				if(a[i + 1][j + 1] == '.') a[i + 1][j + 1] = 'A';
      				if(a[i - 1][j + 1] == '.') a[i - 1][j + 1] = 'A';
      				if(a[i - 1][j - 1] == '.') a[i - 1][j - 1] = 'A';
      				if(a[i + 1][j - 1] == '.') a[i + 1][j - 1] = 'A';
      			}
      		}
      	}
      	for(int i = 1;i <= n;i++)
      	{
      		for(int j = 1;j <= m;j++)
      		{
      			if(a[i][j] == 'A')
      			{
      				a[i][j] = 'M';
      			}
      		}
      	}
      }
      
      bool check()
      {
      	for(int i = 1;i <= n;i++)
      	{
      		for(int j = 1;j <= m;j++)
      		{
      			if(a[i][j] == '.')
      			{
      				return false;
      			}
      		}
      	}
      	return true;
      }
      
      int main()
      {
      	cin >> m >> n >> x >> y;
      	for(int i = 1;i <= n;i++)
      	{
      		for(int j = 1;j <= m;j++)
      		{
      			cin >> a[i][j];
      		}
      	}
      	a[n - y + 1][x] = 'M';
      	for(int ans = 0;;ans++)
      	{
      		if(check())
      		{
      			cout << ans << endl;
      			return 0;
      		}
      		kuo();
      	}
      	return 0;
      }
      
    • 0
      @ 2022-7-28 10:37:04

      名副其实的广搜题, 但是我仍然不会 废话不多说,直接上代码

      #include <iostream>
      #include <queue>
      using namespace std;
      int r, c, x, y;
      int dir[8][2] = { {-1, 0}, {1, 0}, {0, -1}, {0, 1}, {-1, -1}, {1, -1}, {-1, 1}, {1, 1}};
      char ma[105][105];
      bool vis[105][105];
      int ans = 0;
      struct node{
      	int x, y, s;
      };
      queue<node > q;
      void bfs(int x, int y){
      	vis[x][y] = 1;
      	q.push((node){x, y, 0});
      	while(!q.empty()){
      		node p = q.front();
      		q.pop();
      		ans = max(ans, p.s);
      		for(int i=0; i<8; i++){
      			int nx = p.x + dir[i][0];
      			int ny = p.y + dir[i][1];
      			if(1 <= nx && nx <= r && 1 <= ny && ny <= c){
      				if(vis[nx][ny] == 0 && ma[nx][ny] != '*'){
      					vis[nx][ny] = 1;
      					q.push((node){nx, ny, p.s + 1});
      				}
      			}
      		}
      	}
      }
      int main(){
      	cin>>c>>r>>x>>y;
      	for(int i=1; i<=r; i++){
      		for(int j=1; j<=c; j++){
      			cin>>ma[i][j];
      		}
      	}
      	bfs(r - y + 1, x);
      	cout<<ans<<endl;
      }
      
      • 0
        @ 2021-8-7 21:15:25

        C++ :

        #include<iostream>
        #include<algorithm>
        #include<queue>
        using namespace std;
        const int maxn = 120;
        int X, Y, Mx, My;
        struct node{
            int r,c,s;
            node(int r,int c,int s):r(r),c(c),s(s){}
        };
        int dir[][2]={{0,1},{0,-1},{1,0},{-1,0},{1,1},{1,-1},{-1,1},{-1,-1}};
        char m[maxn][maxn];
        bool visited[maxn][maxn];
        int s;
        void bfs(int r, int c)
        {
            queue<node> q;
            visited[r][c] = true;
            q.push(node(r, c, 0));
            while(!q.empty()){
                const node&cur=q.front();
                s=cur.s;
                for(int i=0;i<8; ++i){
                    int nr = cur.r + dir[i][0];
                    int nc = cur.c + dir[i][1];
                    if(0 < nr && nr <= Y && 0 < nc && nc <= X)
                        if(m[nr][nc] == '.' && !visited[nr][nc]){
                            visited[nr][nc] = true;
                            q.push(node(nr, nc, cur.s + 1));
                        }
                }
                q.pop();
            }
        } 
        int main(){
            cin>>X>>Y>>Mx>>My;
            for(int i=Y;i>0;--i)
                for(int j=0;j<X;)
                    cin>>m[i][++j];
            bfs(My,Mx);
            cout<<s;
            return 0;
        }
        
        • -1
          @ 2022-3-25 20:58:52
          #include<iostream>  
          #include<cstring>  
          #include<cstdio>  
          using namespace std;  
          int sx[8]={1,1,1,0,0,-1,-1,-1};  
          int sy[8]={-1,0,1,-1,1,-1,0,1};  
          int x,y,mx,my,nowx,nowy,nowstep,head,tail,n,m,ans;  
          char s[105];  
          struct hp{  
              int x,y,step;  
          }queue[10005];  
          int a[105][105];   
          int main(){  
              scanf("%d%d%d%d\n",&n,&m,&mx,&my);  
              swap(n,m); swap(mx,my);  
              for (int i=1;i<=n;++i){  
                  gets(s);  
                  for (int j=1;j<=m;++j)  
                    if (s[j-1]=='*') a[i][j]=1;  
              }  
              a[mx][my]=1;  
              head=0,tail=1,queue[tail].x=mx,queue[tail].y=my;  
              while (head<tail){  
                  head++;  
                  nowx=queue[head].x,nowy=queue[head].y,nowstep=queue[head].step;  
                  for (int i=0;i<8;++i){  
                      x=nowx+sx[i],y=nowy+sy[i];  
                      if (x>0&&x<=n&&y>0&&y<=m&&!a[x][y]){  
                          a[x][y]=1;  
                          tail++;  
                          queue[tail].x=x,queue[tail].y=y;  
                          queue[tail].step=nowstep+1;  
                          ans=max(ans,queue[tail].step);  
                      }  
                  }  
              }  
              printf("%d",ans);  
          }
          
          • 1

          信息

          ID
          100
          时间
          1000ms
          内存
          128MiB
          难度
          7
          标签
          递交数
          815
          已通过
          188
          上传者