|
1 一笔画问题
2 迷宫问题
3 最短路径问题(就是给出一个交通示意图,边上的数字为路的长度,求每个结点到某个固定点的最短路程)
4 N个球称重问题吧
荷兰国旗问题????四色定理
3种颜色(0,1,2)在一个数组里,每次只可交换一次,扫描一边后,三种颜色自然分开,应为颜色为:红,白,蓝,(荷兰国旗的颜色)所以叫它荷兰国旗问题(也是他老人家的国籍)!
#include stdio.h #include stdlib.h #include time.h
#define N 15
int main(int argc, char* argv[]) { char array[N]; char t,*p_red_end,*p_write_end,*p_blue_head; //分别为红色的尾指针、白色的尾指针、蓝色的首指针
int i;
srand( (unsigned)time( NULL ) ); for(i=0;i<N;i++) { switch (rand()%3) { case 0: array='r'; break; case 1: array='w'; break; default: array='b'; } printf(%c ,array); } printf(\n;
for(p_red_end=p_write_end=array,p_blue_head=array+14;p_write_end<=p_blue_head switch (*p_write_end) { case 'r': t=*p_red_end; *p_red_end=*p_write_end; *p_write_end=t; p_red_end++; p_write_end++; break; case 'b': t=*p_write_end; *p_write_end=*p_blue_head; *p_blue_head=t; p_blue_head--; break; default: p_write_end++; } for(i=0;i<N;i++) printf(%c ,array); } 运行结果是: rrrwwrwwrwbbbbb
这个结果是荷兰国旗算法的结果吗?(我不清楚荷兰国旗算法)
题目最终要求的结果应该是:红,白,兰,红,白,兰,红,白,兰……还是:红,红,红,红,红,白,白,白,白,蓝,蓝,蓝,蓝,蓝……?
#include stdio.h #define k 15 /*假定数组有15个数*/ char a[k]={'r','w','b','r','r','b','w','w','b','b','b','w','r','r','w'}; /*r,b,w代表红,蓝,白*/
main() {int i,ii; char t; int m,n,p; m=0; /*m为红色末尾指针*/ n=0; /*n为白色末尾指针*/ p=14;/*p为蓝红色头指针*/ for (ii=0;ii<15;ii++) printf(%c,a[ii]); while(n<=p) { if (a[n]=='r') {t=a[n];a[n]=a[m];a[m]=t;m++;n++;} else if (a[n]=='w') n++; else { t=a[n];a[n]=a[p];a[p]=t;p--;n++; if (a[n-1]=='r') {t=a[n-1];a[n-1]=a[m];a[m]=t;m++;} }
for (i=0;i<15;i++) prinrf(%s,a[n]);
}
[1] [2] 下一页 |