算法 狼找兔子问题
2016-01-24 17:12
435 查看
<pre name="code" class="cpp">/* 狼找兔子问题 本程序采用循环链表思想解决问题,通过循环遍历,查找结点,并在查找结点做一个标记,并在统计count上自增1, 查找结束后,通过检查count值,如果count<n,说明有满足题意的躲藏点,并输出未作标记的节点;否则,兔子没有躲藏点。 */
/* 狼找兔子问题 本程序采用循环链表思想解决问题,通过循环遍历,查找结点,并在查找结点做一个标记,并在统计count上自增1, 查找结束后,通过检查count值,如果count<n,说明有满足题意的躲藏点,并输出未作标记的节点;否则,兔子没有躲藏点。 */ #include<stdio.h> #include<stdlib.h> //定义结点 struct point { int num ; //当前结点所在位置,从0开始算起,依次类推 int sign ; //标志位,检查是否被查找过,0代表未被查找,1代表已经被查到过 struct point *next ; }; int main(void) { int n , m; // n 代表洞 , m代表跨越查找步长 printf("please input number n and m : \n"); scanf("%d",&n); scanf("%d",&m); struct point *p = NULL; struct point *s = NULL; //循环遍历,依次创建 n 个结点 for(int i = 0 ; i < n ; i++) { if(i == 0) //创建第一个结点 { p = (struct point * )malloc(sizeof(struct point)) ; p->num = i; p->sign = 0; p->next = p; } else //在第一个结点基础上,继续创建余下结点 { s = (struct point * )malloc(sizeof(struct point)) ; s->num = i; s->sign = 0; s->next = p->next ; p->next = s; p = s; } } p = p->next ; //将 p指正回归到最开始那个结点 struct point *q = NULL; q = p ; int count = 0; //开始遍历查找 while(q->sign == 0) { q->sign = 1; count++; //统计找到结点数 int j = 0; while( j < m) //向前推m步 { q = q->next; j++; //控制步长 } } if(count < n) //如果count小于 n ,说明有可躲藏点 { printf("yes, the rabbit have chance of survival, it can hide in the following position:\n"); int j = 0 ; while( j < n) //输出标志位sign为0的所有结点 { if(p->sign == 0) { printf("%d\t",p->num); } p = p->next; j++; } printf("\n"); } else { printf("no, the rabbit had no chance of survival\n"); } //开始销毁链表 q = p->next ; count = 0; while(count < n-1) { free(p); p = q; q= p->next; count++; } free(p); return 0; }
相关文章推荐
- JavaEE Tutorials (15) - 对Java持久化API应用使用二级缓存
- sublime3集成markdown
- PHP得到checkbox多值
- mybatis一次可以执行多个sql语句
- 游戏服务器之mysql句柄连接池
- 2.Adding a Controller
- error U1087: cannot have : and :: dependents for same target
- spring整合Hibernate
- JavaEE Tutorials (14) - 用实体图创建获取计划
- 分治法求一组数据的和
- JavaEE Tutorials (13) - 使用锁定控制对实体数据的并发访问
- 自定义UITextView
- 关于Android权限被禁止的问题
- Struts2原理
- Java中常见的时间处理
- HTTP的长连接和短连接
- 有向图的强连通分量的求解算法Tarjan
- 算法 分治法求矩阵的乘积
- poj 1088 滑雪 dfs+动规
- 有向图的强连通分量的求解算法Tarjan