程序设计实习课程程序设计实习.pptVIP

  • 3
  • 0
  • 约2.43千字
  • 约 51页
  • 2017-04-21 发布于湖北
  • 举报
程序设计实习课程程序设计实习

程序设计实习 第八讲 搜索;内容提要;搜索;搜索;搜索;广度优先搜索;广度优先搜索;广度优先搜索;深度优先搜索;深度优先搜索;深度优先搜索;深度优先搜索;深度优先搜索;判重;判重;判重;判重;判重;判重;广搜与深搜的比较;影响搜索效率的因素;搜索;搜索;;搜索的思想:遍历;程序设计练习1:城堡问题(POJ1164);POJ1164;POJ1164;解题思想;参考程序;问题;int main() { while(scanf(%d %d,r,c)==2) { rooms=max=0; int i,j; for(i=0;ir;i++) for(j=0;jc;j++) { scanf(%d,p[i][j]); visit[i][j]=false; } for(i=0;ir;i++) for(j=0;jc;j++) { modules=0; markRoom(i,j); if(modules!=0) rooms++; if(modulesmax) max=modules; } printf(%d\n%d\n,rooms,max); } return 0; };void markRoom(int x,int y) { if(visit[x][y]) return; else { visit[x][y]=true; modules++; } if ( p[x][y]8 ) markRoom(x+1, y); else p[x][y] = p[x][y]%8; if ( p[x][y]4 ) markRoom(x, y+1); else p[x][y] = p[x][y]%4; if ( p[x][y]2 ) markRoom(x-1, y); else p[x][y] = p[x][y]%2; if ( p[x][y]==0 ) markRoom(x, y-1); };程序设计练习2:木棒问题(POJ1011);解题思路;解题思路;已拼接部分;程序实现;程序实现;程序实现;程序实现;#include iostream.h #include memory.h #include stdlib.h int T, S; int L; int anLength[65]; int anUsed[65]; int i,j,k; int Dfs(int nUnusedSticks, int nLeft); int MyCompare( const void * e1, const void * e2) { int * p1, * p2; p1 = (int * ) e1; p2 = (int * ) e2; return * p2 - * p1; };main() { while(1) { cin S; if( S == 0 ) break; int nTotalLen = 0; for( int i = 0; i S; i ++ ) { cin anLength[i]; nTotalLen += anLength[i]; } qsort(anLength,S,sizeof(int),MyCompare);; for( L = anLength[0]; L = nTotalLen / 2; L ++ ) { if( nTotalLen % L) continue; memset( anUsed, 0,sizeof(anUsed)); if( Dfs( S,L)) { cout L endl; break; } } if( L nTotalLen / 2 ) cout nTotalLen endl; } // while };int Dfs( int nUnusedSticks, int nLeft) // nLeft表示当前正在拼的棍子和 L ???还缺的长度 { if( nUnusedSticks == 0 nLeft == 0 ) return true; if( nLeft == 0 ) //一根刚刚拼完 nLeft = L; //开始拼新的一根 for( int i = 0;i S;i ++) { if( !anUsed[i] anLength[i] = nLeft) { if( i 0 ) { if( anUsed[i-1] == false anLength[i] == anLength[i-1])

文档评论(0)

1亿VIP精品文档

相关文档