尝试写的,测试数据也太少,无法验证是否正确
程序算大数需要时间太长,所以我先去改改
算了,我还是放上来。大家给看看吧,这算法不细致。
如果点的设置间隔比青蛙跳的距离大得多
那计算机都快累死了,我今天忙,谁帮我改改好了
程序中石头坐标默认从小到大输入
#include "stdio.h"
#include "malloc.h"
long num_min,bridge_len,*array,stone_sum;
int min,max;
int Search(long i)
{
long j;
for(j=0;j<stone_sum;j++)
if(array[j]==i)
return 1;
return 0;
}
void Frog_Jump(long i,long total)
{
int j;
long num;
for(j=min;j<=max;j++)
{
num=total+Search(i+j);
if( (i+j)<array[stone_sum-1] )
Frog_Jump(i+j,num);
if( (i+j)>=array[stone_sum-1] && num < num_min )
num_min=num;
}
}
int main()
{
long i;
printf("please input the length of bridge :\n");
scanf("%ld",&bridge_len);
printf("please input the range of frog :\n");
scanf("%d%d",&min,&max);
printf("please input the num of stone :\n");
scanf("%ld",&stone_sum);
array=(long *) malloc (sizeof(long)*stone_sum);
for(i=0;i<stone_sum;i++)
scanf("%ld",array+i);
num_min=stone_sum;
Frog_Jump(0,0);
printf("\n%ld\n",num_min);
free(array);
return 0;
}
[此贴子已经被作者于2006-5-4 6:55:08编辑过]