最新评论

Re:输出1,2,3,..,n的所有组合数 John Rambo 2010-03-13 14:54  
强大啊
谢谢大家的各种评论,不过需要说明的是: [b]这两个算法是绝对正确的[/b]
不好意思, 我再看了一遍, q = p->next; while (p != NULL && q != NULL) { if (p == q) { return 1; } p = p->next; if (q->next == NULL) { return 0; } else { q = q->next->next; } } 用的原理是如果有环,p移动得“慢”,q移动得“快”,由于是循环链表,所以“慢”的在某个时刻一定能追上“快的! 比如1-2-3-4-5-2 这个列表 p:1-> 2-> 3-> 4-> 5-> 2-> 3->4 q:2-> 4-> 2-> 4-> 2-> 4-> 2->4 在循环了第8次,两者"相交"了!
我靠,第二种也是一样的啊 while (p != NULL && q != NULL) { if (p == q) { return 1; } p = p->next; if (q->next == NULL) { return 0; } else { q = q->next->next; } } 遇上类似是1-2-3-4-5-4 这种的链表,循环根本出不来!
我靠,第二种也是一样的啊 while (p != NULL && q != NULL) { if (p == q) { return 1; } p = p->next; if (q->next == NULL) { return 0; } else { q = q->next->next; } } 遇上类似是1-2-3-4-5-4 这种的链表,循环根本出不来!
第一种百分之百有问题 如果是1-2-3-4-5-4 这种的链表 while (q != p) { if (q == p->next) { return 1; } q = q->next; } q 永远不可能== p, q一直在4-5-4-5 这样的死循环,根本出不来!
我觉得第一种是有问题的,只能判断 1—2-3-2
不能判断1-2-3-4-2这种情况。
re: 打印1,2,3,..,n的全排列 庄冠华 2009-05-21 18:46  
没有写错啊,输出是正确的

--引用--------------------------------------------------
pkuoliver: 写错了~~~
for (i=1; i<=n; i++)
{
for (j=0; j<cur; j++)
{
if (a[j] == i)
{
break;
}
if (j>=cur)
{
a[cur] = i;
_p(n, cur+1, a);
}
}
}
}

--------------------------------------------------------
re: 打印1,2,3,..,n的全排列 pkuoliver 2009-05-12 19:40  
写错了~~~
for (i=1; i<=n; i++)
{
for (j=0; j<cur; j++)
{
if (a[j] == i)
{
break;
}
if (j>=cur)
{
a[cur] = i;
_p(n, cur+1, a);
}
}
}
}