C题是不是描述有问题,还是说数据有问腿
rt,第一份代码是没有加上向上走的,只过了43.3%
#include<bits/stdc++.h>
#define int long long
#pragma GCC optimize(2)
using namespace std;
const int N = 2e6 + 10;
int times;
int n,m;
int arr[2010][2010],vis[2010][2010];
int dx[]={0,1,-1,0};
int dy[]={1,0,0,-1};
void solve()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)cin>>arr[i][j],vis[i][j]=N*N;
vis[1][1]=0;
queue<pair<int,int>>Q;
Q.push({1,1});
while(Q.size())
{
auto t = Q.front();
Q.pop();
for(int i=0;i<3;i++)
{
int sx = t.first+dx[i];
int sy = t.second+dy[i];
if(sx>=1&&sx<=n&&sy>=1&&sy<=m)
{
int value = 1+(arr[t.first][t.second]!=arr[sx][sy]);
if(value+vis[t.first][t.second]<vis[sx][sy])
{
vis[sx][sy] = value+vis[t.first][t.second];
Q.push({sx,sy});
}
}
}
}
cout<<vis[n][m]<<endl;
}
signed main()
{
std::ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
times=1;
//cin >> times;
while (times--)
{
solve();
}
return 0;
}
第二份代码,加上了可以向上的方向
#include<bits/stdc++.h>
#define int long long
#pragma GCC optimize(2)
using namespace std;
const int N = 2e6 + 10;
int times;
int n,m;
int arr[2010][2010],vis[2010][2010];
int dx[]={0,1,-1,0};
int dy[]={1,0,0,-1};
void solve()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)cin>>arr[i][j],vis[i][j]=N*N;
vis[1][1]=0;
queue<pair<int,int>>Q;
Q.push({1,1});
while(Q.size())
{
auto t = Q.front();
Q.pop();
for(int i=0;i<4;i++)
{
int sx = t.first+dx[i];
int sy = t.second+dy[i];
if(sx>=1&&sx<=n&&sy>=1&&sy<=m)
{
int value = 1+(arr[t.first][t.second]!=arr[sx][sy]);
if(value+vis[t.first][t.second]<vis[sx][sy])
{
vis[sx][sy] = value+vis[t.first][t.second];
Q.push({sx,sy});
}
}
}
}
cout<<vis[n][m]<<endl;
}
signed main()
{
std::ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
times=1;
//cin >> times;
while (times--)
{
solve();
}
return 0;
}
京东工作强度 428人发布