社区讨论

简单题目求条(wgzs)

学术版参与者 3已保存回复 19

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
18 条
当前快照
1 份
快照标识符
@mkienpw3
此快照首次捕获于
2026/01/17 22:31
上个月
此快照最后确认于
2026/01/21 10:35
4 周前
查看原帖
题目大意为,有一个n行m列的矩阵,0是路(可以走),1是墙(不能走),但是最多可以移走k堵墙,问能走到的路中最长的欧几里得距离是多少,输出是保留六位小数
CPP
3 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 条回复,欢迎继续交流。

正在加载回复...