#14179: 求指教


buanyz03 (張晁瑋)

學校 : 新北市立板橋高級中學
編號 : 2629
來源 : [114.25.190.198]
最後登入時間 :
2023-09-06 15:43:50
b423. 魔術橡皮擦 | From: [118.167.71.133] | 發表日期 : 2018-06-21 23:02

#include <iostream>
#include <math.h>
using namespace std;
struct node
{
int color[4];
};
double dis(node a,node b)
{
double sum=0;
for(int i=0;i<3;++i)
{
sum+=(a.color[i]-b.color[i])*(a.color[i]-b.color[i]);
}
return sqrt(sum);
}
int x,y,w,h;
double d;
node m[500][500];
void dfs(int tx,int ty)
{
if(dis(m[tx][ty],m[x][y])>d || m[tx][ty].color[3]==0)
{
return;
}
m[tx][ty].color[3]=0;
if(tx+1<h)
{
dfs(tx+1,ty);
}
if(tx-1>=0)
{
dfs(tx-1,ty);
}
if(ty+1<w)
{
dfs(tx,ty+1);
}
if(ty-1>=0)
{
dfs(tx,ty-1);
}
}
int main()
{
int t;
while(cin>>x>>y>>t>>d)
{
cin>>w>>h;
for(int i=0;i<h;++i)
{
for(int j=0;j<w;++j)
{
for(int k=0;k<4;++k)
{
cin>>m[i][j].color[k];
}
}
}
if(t==0 && d>=0)
{
for(int i=0;i<h;++i)
{
for(int j=0;j<w;++j)
{
if(dis(m[i][j],m[x][y])>d)
{
continue;
}
m[i][j].color[3]=0;
}
}
}
else if(d>=0)
{
if(m[x][y].color[3]!=0)
{
dfs(x,y);
}
}
cout<<w<<" "<<h<<endl;
for(int i=0;i<h;++i)
{
for(int j=0;j<w;++j)
{
for(int k=0;k<4;++k)
{
cout<<m[i][j].color[k]<<" ";
}
}
cout<<endl;
}
}
}

不知道是怎樣的測資沒考慮到

 
#14181: Re:求指教


asnewchien@gmail.com (david)

學校 : 不指定學校
編號 : 68108
來源 : [114.42.132.249]
最後登入時間 :
2024-05-07 23:09:03
b423. 魔術橡皮擦 | From: [36.232.38.194] | 發表日期 : 2018-06-21 23:34

#include
#include
using namespace std;
struct node
{
int color[4];
};
double dis(node a,node b)
{
double sum=0;
for(int i=0;i<3;++i)
{
sum+=(a.color[i]-b.color[i])*(a.color[i]-b.color[i]);
}
return sqrt(sum);
}
int x,y,w,h;
double d;
node m[500][500];
void dfs(int tx,int ty)
{
if(dis(m[tx][ty],m[x][y])>d || m[tx][ty].color[3]==0)
{
return;
}
m[tx][ty].color[3]=0;
if(tx+1<h)
{
dfs(tx+1,ty);
}
if(tx-1>=0)
{
dfs(tx-1,ty);
}
if(ty+1<w)
{
dfs(tx,ty+1);
}
if(ty-1>=0)
{
dfs(tx,ty-1);
}
}
int main()
{
int t;
while(cin>>x>>y>>t>>d)
{
cin>>w>>h;
for(int i=0;i<h;++i)
{
for(int j=0;j<w;++j)
{
for(int k=0;k<4;++k)
{
cin>>m[i][j].color[k];
}
}
}
if(t==0 && d>=0)
{
for(int i=0;i<h;++i)
{
for(int j=0;j<w;++j)
{
if(dis(m[i][j],m[x][y])>d)
{
continue;
}
m[i][j].color[3]=0;
}
}
}
else if(d>=0)
{
if(m[x][y].color[3]!=0)
{
dfs(x,y);
}
}
cout<<w<<" "<<h<<endl;
for(int i=0;i<h;++i)
{
for(int j=0;j<w;++j)
{
for(int k=0;k<4;++k)
{
cout<<m[i][j].color[k]<<" ";
}
}
cout<<endl;
}
}
}

不知道是怎樣的測資沒考慮到

第五個測資 y=w 您有發現嗎。


 
#14182: Re:求指教


asnewchien@gmail.com (david)

學校 : 不指定學校
編號 : 68108
來源 : [114.42.132.249]
最後登入時間 :
2024-05-07 23:09:03
b423. 魔術橡皮擦 | From: [36.232.38.194] | 發表日期 : 2018-06-21 23:36

 

第五個測資 y=w 您有發現嗎。



y=h 打錯了。

 
#14183: Re:求指教


asnewchien@gmail.com (david)

學校 : 不指定學校
編號 : 68108
來源 : [114.42.132.249]
最後登入時間 :
2024-05-07 23:09:03
b423. 魔術橡皮擦 | From: [36.232.38.194] | 發表日期 : 2018-06-21 23:41

 

if(m[x][y].color[3]!=0)
{
dfs(x,y);
}

你這個進入遞迴的點,

我都進的,然後直接給 0

 
#14186: Re:求指教


buanyz03 (張晁瑋)

學校 : 新北市立板橋高級中學
編號 : 2629
來源 : [114.25.190.198]
最後登入時間 :
2023-09-06 15:43:50
b423. 魔術橡皮擦 | From: [60.248.142.208] | 發表日期 : 2018-06-22 14:54

 

if(m[x][y].color[3]!=0)
{
dfs(x,y);
}

你這個進入遞迴的點,

我都進的,然後直接給 0



if((x>=0 && x<w) && (y>=0 && y<h) && d>=0)

{

if(t==0)

{

for(int i=0;i<h;++i)

{

for(int j=0;j<w;++j)

{

if(dis(m[i][j],m[x][y])>d)

{

continue;

}

m[i][j].color[3]=0;

}

}

}

else if(t==1)

{

if(m[x][y].color[3]!=0)

{

dfs(x,y);

}

}

}

感謝你的指導 我已經將輸入範圍做考慮 但不知道遞迴的邏輯那邊 應該怎麼修改才對

 
ZeroJudge Forum