usaco 2.4.2 Overfencing

2024-10-13 03:46:33

1、这道题我被卡了好久。原因就在于输入搞错了。好吧主要还是我基本功不扎实。一下是我改正后的输入部分。

usaco 2.4.2 Overfencing

3、还要注意一点。记录的s并不直接是步数。而是(步数+1)/2 !!!!!这个地方我也错了一回。

4、一下是我的代码:#include<stdio.h>#include<string.h>#include<sstream>#include<string>#include<iostream>#define FF for(i=0;i<H;i++) for(j=0;j<W;j++)using namespace std;int s[202][80];int H,W;int w[202][80];void move(int i,int j){if(i-1>0&&w[i-1][j]&&s[i-1][j]>s[i][j]+1){s[i-1][j]=s[i][j]+1;move(i-1,j);}if(j-1>0&&w[i][j-1]&&s[i][j-1]>s[i][j]+1){s[i][j-1]=s[i][j]+1;move(i,j-1);}if(i+1<H&&w[i+1][j]&&s[i+1][j]>s[i][j]+1){s[i+1][j]=s[i][j]+1;move(i+1,j);}if(j+1<W&&w[i][j+1]&&s[i][j+1]>s[i][j]+1){s[i][j+1]=s[i][j]+1;move(i,j+1);}}int main(){int ai,aj,bi,bj;ai=-1;int i,j,k;string tmp;for(i=0;i<202;i++){for(j=0;j<80;j++)s[i][j]=100000;}freopen("maze1.in","r",stdin);freopen("maze1.out","w",stdout);cin>>W>>H;getchar();W=W*2+1;H=H*2+1;for(i=0;i<H;i++) {getline(cin,tmp);for(j=0;j<W;j++){if(tmp[j]==' '){w[i][j]=1;if(i==0||i==H-1||j==0||j==W-1){if(ai==-1){ai=i;aj=j;}else{bi=i;bj=j;}}}else w[i][j]=0;}tmp.clear();}s[ai][aj]=0;s[bi][bj]=0;move(ai,aj);move(bi,bj);int max=0;FF{if(s[i][j]!=100000&&s[i][j]>max){max=s[i][j];}}printf("%d\n",(max+1)/2);return 0;}

usaco 2.4.2 Overfencing
猜你喜欢