社区讨论
简单题目求条(wgzs)
学术版参与者 3已保存回复 19
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 18 条
- 当前快照
- 1 份
- 快照标识符
- @mkienpw3
- 此快照首次捕获于
- 2026/01/17 22:31 上个月
- 此快照最后确认于
- 2026/01/21 10:35 4 周前
题目大意为,有一个n行m列的矩阵,0是路(可以走),1是墙(不能走),但是最多可以移走k堵墙,问能走到的路中最长的欧几里得距离是多少,输出是保留六位小数
CPP3 3 1
001
001
001
输出为:2.828427
CPP#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,k;
double ma;
int dx[5]={0,1,-1,0,0},dy[5]={0,0,0,-1,1};
char ch[105][105];
bool bj[105][105];
struct stu {
int first,second,third;
};
signed main() {
cin>>n>>m>>k;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>ch[i][j];
for(int i=1;i<=n;i++) {
for(int j=1;j<=m;j++) {
for(int ii=1;ii<=n;ii++)
for(int jj=1;jj<=m;jj++)
bj[ii][jj]=0;
if(ch[i][j]=='1'&&k==0) continue;
bj[i][j]=1;
queue<stu >q;
while(q.size()) q.pop();
if(ch[i][j]=='0')q.push({i,j,0});
else q.push({i,j,1});
while(q.size()) {
stu s=q.front();
q.pop();
ma=max(ma,sqrt(abs(i-s.first)*abs(i-s.first)+abs(j-s.second)*abs(j-s.second)));
for(int i=1;i<=4;i++) {
int xx=s.first+dx[i],yy=s.second+dy[i];
if(xx<1||yy<1||xx>n||yy>m||bj[xx][yy]) continue;
if(ch[xx][yy]=='1') {
if(s.third>=k) continue;
q.push({xx,yy,s.third+1});
}
else q.push({xx,yy,s.third});
bj[xx][yy]=1;
}
}
}
}
cout<<1;
return 0;
}
是在看不出来哪里错了
回复
共 19 条回复,欢迎继续交流。
正在加载回复...