3 条题解

  • 1
    @ 2026-5-17 15:13:28
    
    
    
    #include <iostream>
    #include <queue>
    #include <iomanip>
    using namespace std;
    struct node
    {
    	int x;
    	int y;
    	int step;
    }; 
    int n, m, sx, sy, ex, ey;
    char s[405][405];
    bool vis[405][405];
    int dis[405][405];
    int dx[8] = {-2, -2, -1, -1, 1, 1, 2, 2};
    int dy[8] = {-1, 1, -2, 2, -2, 2, -1, 1};
    void bfs()
    { 
    	queue<node> q;
    	q.push({sx, sy, 0}); 
    	vis[sx][sy]=true;
      	dis[sx][sy]=0; 
    	while (!q.empty())
    	{
    		node now = q.front();
    		q.pop();
    		for (int i = 0; i <= 7; i++)
    		{
        		int nx = now.x + dx[i], ny = now.y + dy[i];
        		if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && vis[nx][ny] == false)
        		{
            		vis[nx][ny] = true;
            		q.push({nx, ny, now.step + 1});
            		dis[nx][ny]=dis[now.x][now.y]+1;
        		}
    		}	
    	}
    }
    int main()
    {
    	cin >> n >> m >> sx >> sy;
    	for(int i=1;i<=n;i++)
      	{
      	    for(int j=1;j<=m;j++)
      	    {
      	        dis[i][j]=-1;
      	    }
      	}
      	
    	bfs(); 
    	for(int i=1;i<=n;i++)
      	{
      	    for(int j=1;j<=m;j++)
      	    {
                cout<<left;
      	        cout<<setw(5)<<dis[i][j];
      	    }
      	    cout<<endl;
      	}
    	return 0;
    }
    
    

    信息

    ID
    2495
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    738
    已通过
    150
    上传者