} if ( valid == TRUE ) printf(\ else printf(\}
void push_stack( stack *topptr, char ch ) { stack newptr; newptr=(struct node * ) malloc( LEN ); newptr->data=ch; newptr->next=*topptr; *topptr=newptr; }
int pop_stack( stack topptr ) { stack tempptr; char popvalue; if (topptr!=NULL ) { tempptr=topptr; popvalue=topptr->data; topptr=topptr->next; free( tempptr ); return popvalue; } else return 0; }
6£®ÓÃCÓïÑÔ±àд±³°üÎÊÌâµÄËã·¨¡£±³°üÎÊÌâµÄÃèÊöÊÇ£º¼ÙÉèÓÐn¼þÖÊÁ¿·Ö±ðΪw1£¬w2£¬?£¬wnµÄÎïÆ·ºÍÒ»¸ö×î¶àÄÜ×°ÔØ×ÜÖÊÁ¿ÊÇTµÄ±³°ü£¬ÎÊÄÜ·ñ´ÓÕân¼þÎïÆ·ÖÐÑ¡ÔñÈô¸É¼þÎïÆ·×°È˱³°ü£¬²¢ÇÒʹ±»Ñ¡ÎïÆ·µÄ×ÜÖÊÁ¿Ç¡ºÃµÈÓÚ±³°üËùÄÜ×°ÔØµÄ×î´óÖÊÁ¿£¬¼´Wxl£«Wx2£«?Wxk£½T¡£ÈôÄÜ£¬Ôò±³°üÎÊÌâÓн⣬·ñÔò±³°üÎÊÌâÎ޽⡣
#include \
#define NUMBER 20 /*¶¨ÒåÎïÆ·¸öÊý*/ #define TRUE 1 #define FALSE 0
int stack[NUMBER];
int top; void main() { int knapproblem( int, int, int[]); int weight[NUMBER]; /*´æ·ÅÎïÆ·ÖÊÁ¿µÄÊý×é*/ int n, i; int maxweight; /*°üËùÄܳÐÊܵÄ×î´óÖØÁ¿*/ printf(\ scanf(\ printf(\ scanf(\ printf( \ Please input every object's weight :\\n\ for (i=1; i<=n; i++ ) scanf(\if (knapproblem(n, maxweight, weight ) == TRUE ) /*µ÷Óñ³°ü´¦Àíº¯Êý*/ { printf(\ printf(\ for ( ;top>0;top-- ) printf(\stack[top],weight[stack[top]]); /*pop stack and print every weight*/ printf(\ } else printf(\} /*main*/
int knapproblem( int n, int maxweight, int weight[] ) /*±³°üÎÊÌâ´¦Àíº¯Êý*/ { /*func kanpstack*/ int i=1; top=0; while ((maxweight>0)&&(i<=n)) { if ((maxweight-weight[i]==0) || ((maxweight-weight[i] >0 )&& (i /*Push No.i stack*/ stack[ ++top ]=i; maxweight = maxweight-weight[i]; } if ( maxweight==0) /*Äܹ»×°Èë°üÖÐ*/ { return( TRUE ); } else if (( i==n )&& (top>0)) /*¼ÌÐøÊÔ̽*/ { i=stack[top]; top=top-1; maxweight = maxweight+weight[i]; } i++; } /*while*/ return( FALSE ); } /*knapproblem*/ 7£®»®·Ö×Ó¼¯ÎÊÌâµÄÇó½â¡£»®·Ö×Ó¼¯ÎÊÌâµÄʵ¼ÊÀý×Ӻܶ࣬È磺ij¸öÔ˶¯»áÉèÁ¢n¸ö±ÈÈüÏîÄ¿£¬Ã¿¸öÔ˶¯Ô±¿ÉÒԲμÓÒ»µ½Èý¸öÏîÄ¿£¬¿¼Âǵ½Í¬Ò»Ô˶¯Ô±²Î¼ÓµÄÏîÄ¿²»Äܹ»ÔÚͬһʱ¼äÄÚ½øÐУ¬ÔòÈçºÎ°²ÅűÈÈüÈճ̲ÅÄÜʹ×ܵÄÈÕ³Ì×î¶Ì¡£ÓÖÈ磺ѧУ¿ªÉèm¿Æ¿Î³Ì£¬²»Í¬µÄͬѧ¿ÉÄÜÑ¡ÐÞ¶àÃŲ»Í¬µÄ¿Î³Ì£¬ÔÚѧÆÚĩҪ½øÐп¼ÊÔ£¬ÔòÈçºÎ°²ÅÅÕâm¿Æ¿Î³ÌµÄ¿¼ÊÔ²ÅÄÜʹ¿¼ÊÔʱ¼ä×î¶Ì¶øÓÖ²»³åÍ»¡£ #include \ #define MAX 10 /*ÔªËØÊýÄ¿*/ int r[MAX][MAX]; /*´æ·Å¹ØÏµ¾ØÕó*/ int n; int result[MAX]; /*´æ·Å·Ö×é½á¹û*/ void main() { void division( int [MAX][MAX] ); /*ÉùÃ÷»®·Ö×Ó¼¯º¯Êý*/ int i, j; printf(\ scanf(\ printf(\matrix,1 rash, 0 no rash:\\n\/*ÊäÈë³åÍ»¾ØÕó,1³åÍ»,0²»³åÍ»*/ for ( i=1; i<=n; i++ ) for( j=1; j<=n; j++ ) scanf(\ division(r); /*µ÷ÓÃ×Ó¼¯»®·Öº¯Êý*/ for( i=1; i<=n; i++ ) /*Êä³ö·Ö×é½á¹û*/ printf(\i, result[i]); } void division ( int r[MAX][MAX]) { /*×Ó¼¯»®·Öº¯Êý*/ int newr[MAX]; /*¼Ç¼ËùÓÐÒÔÈë×éµÄÔªËØ·¢Éú³åÍ»µÄÔªËØÐÅÏ¢*/ int cq[MAX]; /*Ñ»·¶ÓÁÐ*/ int i, k; int front, rear; /*Ñ»·¶ÓÁÐͷβָÕë*/ int group, pre; for (k=0; k<=n-1; k++ ) /*n¸öÔªËØÒÀ´ËÈë¶ÓÁÐ*/ cq[k]=k+1; for ( k=0; k<=n; k++)/*³õʼ״̬,¾ù²»³åÍ»*/ newr[k]=0; group=1; pre=0; while (( rear != front ) || (rear != 0 )) { front=(front+1)%n; i=cq[front]; if (i