#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;
}
}
}
不知道是怎樣的測資沒考慮到
#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 您有發現嗎。
if(m[x][y].color[3]!=0)
{
dfs(x,y);
}
你這個進入遞迴的點,
我都進的,然後直接給 0
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);
}
}
}
感謝你的指導 我已經將輸入範圍做考慮 但不知道遞迴的邏輯那邊 應該怎麼修改才對