这是第一遍时的代码,最终代码可在POJ上查到。之后改了五遍,在Dev C++上我测试的几个数据都过了,但最终在POJ仍然没过,原因不明。
错误的地方如下:两处结构错误,两处低级错误
Source Code
Problem: 1826 | User: cozlind | |
Memory: N/A | Time: N/A | |
Language: C | Result: Compile Error |
- Source Code
#include <stdio.h> int x[200000],y[200000],v[200000]={-1},n,flag[200000]={0}; int eplo(int a,int b) {int i,r=0; for(i=0;i<n;i++) {if(((x[i]==a)&&((y[i]==b+1)||(y[i]==b-1)))||((y[i]==b)&&((x[i]==a+1)||(x[i]==a-1)))) {if(flag[i]==0) {flag[i]=1; return v[i]+eplo(x[i],y[i]); //此处若直接返回就只能前进一步,不能实现不同方向同时前进,于是修改为r=r+v[i]+eplo(x[i],y[i]); } } else return 0; //此处若用else就会导致第一个数就跳出,于是把这句删除,在下两行加一句 } return r;
} int main() {int j,k=0,value[200000],max=0; scanf("%d",&n); if(n>0) {for(j=0;j<n;j++) scanf("%d%d%d",&x[j]&y[j]&z[j]); //低级错误
改为 scanf("%d%d%d",&x[j],&y[j],&v[j]);
for(j=0;j<n;j++) {if(flag[j]==0) {flag[j]=1; value[k]=v[j]+eplo(x[j],y[j]); k++; } } for(j=0;j<k;j++) max=(value[k]>max?value[k]:max);//低级错误
改为 max=(value[j]>max?value[j]:max);
printf("%d",max); } }