UVA 825 - Walking on the Safe Side(重做)

本文深入探讨了一道编程题目,通过对比不同解决方案,展示了如何有效解决复杂编程问题。其中包括了高难度代码解析,以及作者自己的尝试与错误,旨在提供一种深入理解编程问题并寻找最优解的方法论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这道题改天重新做一下:

高人的代码:

#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define MAXD 1010
char b[10010];
int N, M, G[MAXD][MAXD], f[MAXD][MAXD];
void solve()
{
int i, j, k;
gets(b);
sscanf(b, "%d%d", &N, &M);
memset(G, 0, sizeof(G));
for(i = 1; i <= N; i ++)
{
gets(b);
for(j = 0; isdigit(b[j]); j ++);
while(b[j])
{
if(isdigit(b[j]))
{
sscanf(b + j, "%d", &k);
G[i][k] = 1;
while(isdigit(b[j]))
j ++;
}
else
j ++;
}
}
for(i = 0; i <= N; i ++)
f[i][0] = 0;
for(i = 0; i <= M; i ++)
f[0][i] = 0;
f[1][0] = 1;
for(i = 1; i <= N; i ++)
for(j = 1; j <= M; j ++)
{
f[i][j] = 0;
if(!G[i][j])
{
f[i][j] += f[i - 1][j];
f[i][j] += f[i][j - 1];
}
printf("i=%d j=%d f[i][j]=%d\n",i,j,f[i][j]);
}
printf("%d\n", f[N][M]);
}
int main()
{
int t;
gets(b);
sscanf(b, "%d", &t);
while(t)
{
gets(b);
solve();
if(-- t)
printf("\n");
}
return 0;
}

我的代码:(wrong answer)

#include<stdio.h>
#include<string.h>
#define MAXN 10110
int cros[MAXN][MAXN], f[MAXN][MAXN];
char scros[MAXN][2*MAXN];
int n, W, N, num;
void dp(int i, int j)
{
printf("i=%d j=%d num=%d\n",i, j, num);
if(i==W&&j==N) {num ++; return;}
if((cros[i][j+1] != -1) && j+1<=N)
dp(i,j+1);
if(cros[i+1][j] != -1 && i+1<=W)
dp(i+1,j);
}
void input()
{
scanf("%d",&n);
while(n --)
{
scanf("%d%d", &W, &N);
getchar();
for(int i = 1; i <= W; i ++)
{
for(int j = 1; j <= N; j ++)
{cros[i][j] = 0;}
}
for(int i = 1; i <= W; i ++)
{
gets(scros[i]);
int len = strlen(scros[i]);
for(int j = 0; j < len; j ++)
{
int t = 0;
if(scros[i][j] == ' '&& scros[i][j+1] <= '9'&&scros[i][j+1] >= '0')
{
sscanf(scros[i]+j+1,"%d",&t);
cros[i][t] = -1;
}
}
}
num = 0;
//mset(f,0,sizeof(f));
dp(1,1);
printf("%d\n",num);
puts("");
}
}
int main()
{
input();
return 0;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值