50分·BFS求助
查看原帖
50分·BFS求助
677234
FstAutoMaton楼主2022/10/9 18:49

代码如下

#include <bits/stdc++.h>
using namespace std;
int a[1005][1005], minx = 1e9, n, m, sum[1005][1005], type[1005][1005];
bool l[1005][1005], b;
struct node
{
	int x, y;	
};
void bfs()
{
    queue <node> Q;
    Q.push( {1, 1} );
    l[1][1] = 1;
    while( !Q.empty() )
    {
    	node tmp = Q.front();
    	Q.pop();
    	if( tmp.x == n && tmp.y == m )
    	{
    		cout << sum[n][m];
    		return ;
    	}
    	int xn = tmp.x + a[tmp.x][tmp.y], yn = tmp.y + a[tmp.x][tmp.y];
    	int xx = tmp.x - a[tmp.x][tmp.y], yy = tmp.y - a[tmp.x][tmp.y];
    	if( 1 != type[tmp.x][tmp.y] && xn <= n && tmp.y <= m && xn >= 1 && tmp.y >= 1 && !l[xn][tmp.y] )
    	{
    		Q.push( { xn, tmp.y } );
    		sum[xn][tmp.y] = sum[tmp.x][tmp.y] + 1;
    		type[xn][tmp.y] = 1;
    		l[xn][tmp.y] = 1;
    	}
		if( 2 != type[tmp.x][tmp.y] && xx <= n && tmp.y <= m && xx >= 1 && tmp.y >= 1 && !l[xx][tmp.y] )
		{
			Q.push( { xx, tmp.y } );
			sum[xx][tmp.y] = sum[tmp.x][tmp.y] + 1;
			type[xx][tmp.y] = 2;
			l[xx][tmp.y] = 1;
		}
		if( 3 != type[tmp.x][tmp.y] && tmp.x <= n && yn <= m && tmp.x >= 1 && yn >= 1 && !l[tmp.x][yn] )
		{
			Q.push( { tmp.x,yn } );
			sum[tmp.x][yn] = sum[tmp.x][tmp.y] + 1;
			type[tmp.x][yn] = 3;
			l[tmp.x][yn] = 1;
		}
		if( 4 != type[tmp.x][tmp.y] && tmp.x <= n && yy <= m && tmp.x >= 1 && yy >= 1 && !l[tmp.x][yy] )
		{
			Q.push( { tmp.x, yy } );
			sum[tmp.x][yy] = sum[tmp.x][tmp.y] + 1;
			type[tmp.x][yy] = 4;
			l[tmp.x][yy] = 1;
		}
		if( 5 != type[tmp.x][tmp.y] && xn <= n && yn <= m && xn >= 1 && yn >= 1 && !l[xn][yn] )
		{
			Q.push( { xn, yn } );
			sum[xn][yn] = sum[tmp.x][tmp.y] + 1;
			type[xn][yn] = 5;
			l[xn][yn] = 1;
		}
		if( 6 != type[tmp.x][tmp.y] && xn <= n && yy <= m && xn >= 1 && yy >= 1 || !l[xn][yy] )
		{
			Q.push( { xn, yy } );
			sum[xn][yy] = sum[tmp.x][tmp.y] + 1;
			type[xn][yy] = 6;
			l[xn][yy] = 1;
		}
		if( 7 != type[tmp.x][tmp.y] && xx <= n && yn <= m && xx >= 1 && yn >= 1 && !l[xx][yn] )
		{
			Q.push( { xx, yn } );
			sum[xx][yn] = sum[tmp.x][tmp.y] + 1;
			type[xx][yn] = 7;
			l[xx][yn] = 1;
		}
		if( 8 != type[tmp.x][tmp.y] && xx <= n && yy <= m && xx >= 1 && yy >= 1 && !l[xx][yy] )
		{
			Q.push( { xx, yy } );
			sum[xx][yy] = sum[tmp.x][tmp.y] + 1;
			type[xx][yy] = 8;
			l[xx][yy] = 1;
		}
    }
    cout << "NEVER";
}
int main()
{
    cin >> n >> m;
    for( int i = 1; i <= n; i ++ )
    {
        for( int j = 1; j <= m; j ++ ) cin >> a[i][j];
    }
    bfs();
}
2022/10/9 18:49
加载中...