zoj 1002 Fire Net dfs
처음에 이 문제는 잠시 후에 코드를 다 썼고 샘플도 지났지만 WA...생각하고 또 생각했지만 오류를 찾아내지 못하고 마지막으로 이 문제의 데이터를 뒤져 보니
3
...
..X
.XX
이 데이터는 지나칠 수 없다. 나는 다시 귀환 과정을 자세히 그렸는데 원래 프로그램에서 k=0(k-그 단계는 원래 k=0)이 잘못된 것이다. 귀환 귀환 귀환 과정에서 k값이 사용될 수 있기 때문에 k--로 바뀌었다. 즉, a[i][j]=1을 한 번 거슬러 올라가는 동시에 발견할 수 있는 수량 k도 한 번 거슬러 올라가게 한다(하나를 줄인다). 그러면 이 문제AC를 순조롭게 해결할 수 있다. 허허!
사랑해요!!!
#include
#include
int a[6][6],max,n,k;
void dfs()
{
int i,j,p,num=0;
int px[200],py[200];
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(a[i][j]==1)
{
k++;
a[i][j]=-1;
for(p=j+1;p<=n;p++)
{
if(a[i][p]==0)
break;
else
if(a[i][p]==1)
{
a[i][p]=-1;
px[num]=i;
py[num]=p;
num++;
}
}
for(p=j-1;p>=1;p--)
{
if(a[i][p]==0)
break;
else
if(a[i][p]==1)
{
a[i][p]=-1;
px[num]=i;
py[num]=p;
num++;
}
}
for(p=i+1;p<=n;p++)
{
if(a[p][j]==0)
break;
else
if(a[p][j]==1)
{
a[p][j]=-1;
px[num]=p;
py[num]=j;
num++;
}
}
for(p=i-1;p>=1;p--)
{
if(a[p][j]==0)
break;
else
if(a[p][j]==1)
{
a[p][j]=-1;
px[num]=p;
py[num]=j;
num++;
}
}
dfs();
while(num)
{
num--;
a[px[num]][py[num]]=1;
}
if(k>max)
max=k;
a[i][j]=1;
k--; // k=0;
}
}
}
int main()
{
int i,j;
char s[6];
while(scanf("%d",&n)&&n)
{
getchar();
max=k=0;
memset(a,0,sizeof(a));// 0 stand wall
for(i=0;i
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
UVA 7508황후·(2)+예처리+귀속#include #include #include #include #include #include #include #include #include #include #include #include #include usi...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.