c++ STL平常练习-3

 接上一篇:

 

  
  
  
  
  1. void main79() 
  2.     hanoi(3,'a','b','c' ); 
  3.     printf("%I64d\n",hanoiIII(12)); 
  4.  
  5. char maze2[MAZESIZE][MAZESIZE]; 
  6.  
  7. int go2[][2] =  
  8.     {-1,0}, 
  9.     {-1,1}, 
  10.     {0,1}, 
  11.     {1,1}, 
  12.     {1,0}, 
  13.     {1,-1}, 
  14.     {0,-1}, 
  15.     {-1,-1} 
  16. }; 
  17.  
  18. void deepInto(int i,int j,int m,int n) 
  19.     maze2[i][j] = '#'
  20.     for(int k=0; k<8; ++k) 
  21.     { 
  22.         int ii = i+go2[k][0]; 
  23.         int jj = j+go2[k][1]; 
  24.         if(ii <= 0 || ii > m || jj <= 0 || jj > n) continue
  25.         if(maze2[ii][jj] == '@'
  26.             deepInto(ii,jj,m,n); 
  27.     } 
  28.  
  29. int findPlot(int m,int n) 
  30.     int ret = 0; 
  31.     for(int i=1; i<=m; ++i) 
  32.         for(int j=1; j<=n; ++j) 
  33.         { 
  34.             if(maze2[i][j] == '@'
  35.             { 
  36.                 ++ret; 
  37.                 deepInto(i,j,m,n); 
  38.             } 
  39.         } 
  40.     return ret; 
  41.  
  42. void main81() 
  43.     int n,m; 
  44.     while(cin>>m>>n && m) 
  45.     { 
  46.         for(int i=1; i<=m; ++i) 
  47.             for(int j=1; j<=n; ++j)          
  48.                 cin>>maze2[i][j];                            
  49.         cout<<findPlot(m,n)<<endl; 
  50.     } 
  51.   
  52.   
  53. int NN,MM,TT; 
  54. bool success; 
  55. void findTpath(int S1,int E1,int S2,int E2,int t) 
  56. {     
  57.     /*      这种方法不行,  出口不能在这判断 
  58.     if(S1 == S2 && E1 == E2) 
  59.     { 
  60.         cout<<"find it           "<<t<<endl; 
  61.         if(t == TT) 
  62.             success = true; 
  63.     } 
  64.     */ 
  65.     for(int i=0; i<4; ++i)       
  66.     { 
  67.         int ii=S1 + dir[i][0]; 
  68.         int jj=E1 + dir[i][1]; 
  69.         if(ii < 1 || ii > NN || jj <1 || jj > MM) 
  70.             continue
  71.         if(maze2[ii][jj] == '.'
  72.         { 
  73.             maze2[ii][jj] = '#'
  74.             findTpath(ii,jj,S2,E2,t+1); 
  75.             maze2[ii][jj] = '.'
  76.         } 
  77.         if(maze2[ii][jj] == 'D')             //查找出口的时候在这判断 
  78.         { 
  79.             if(t+1 == TT) 
  80.                 success = true
  81.             return
  82.         } 
  83.     } 
  84.   
  85.  
  86.  
  87.  
  88. void main80() 
  89.     int S1,S2,E1,E2; 
  90.     while(cin>>NN>>MM>>TT && NN) 
  91.     { 
  92.         for(int i=1; i<=NN; ++i) 
  93.             for(int j=1; j<=MM; ++j) 
  94.             { 
  95.                 cin>>maze2[i][j]; 
  96.                 if(maze2[i][j] == 'S')  {   S1 = i; E1 = j; } 
  97.                 else if(maze2[i][j] == 'D'){ S2 = i; E2 = j; } 
  98.             } 
  99.             maze2[S1][E1] = '#'
  100.             success = false
  101.               
  102.             findTpath(S1,E1,S2,E2,0); 
  103.         if(success) 
  104.             cout<<"yes"<<endl; 
  105.         else cout<<"no"<<endl; 
  106.     } 
  107.  
  108. void main82() 
  109.     __int64 F[91]; 
  110.     F[1] = 1; 
  111.     F[2] = 2; 
  112.  
  113.     for(int i=3; i<91; ++i) 
  114.         F[i] = F[i-1] + F[i-2]; 
  115.     while(cin>>i) 
  116.         printf("%I64d\n",F[i]); 
  117.  
  118. int dp[N]; 
  119. int l[N]; 
  120.  
  121. int LIS(int m) 
  122.     int ret = 1; 
  123.     for(int i=1; i<m; ++i) 
  124.         for(int j=i-1; j>=0; --j) 
  125.         { 
  126.             if(l[i] <= l[j] && dp[i] < dp[j]+1)   //此题中高度相等也要计算 
  127.             { 
  128.                 dp[i] = dp[j] + 1;               
  129.             } 
  130.         } 
  131.     for(i=0; i<m; ++i) 
  132.     {  
  133.         if(ret < dp[i]) 
  134.             ret = dp[i]; 
  135.     } 
  136.     return ret; 
  137. }    
  138.  
  139. void main84() 
  140. {    
  141.     int m,i; 
  142.     cin>>m; 
  143.     for(i=0; i<m; ++i) 
  144.     { 
  145.         dp[i] = 1; 
  146.         cin>>l[i]; 
  147.     } 
  148.     cout<<LIS(m)<<endl; 
  149.  
  150. #define max(x,y) (x>y?x:y) 
  151.  
  152. void main85() 
  153.     char s1[100],s2[100]; 
  154.     int dp[100][100];  
  155.  
  156.     cin>>s1>>s2; 
  157.     int l1 = strlen(s1); 
  158.     int l2 = strlen(s2); 
  159.  
  160.     for(int i=0; i<=l1; ++i) dp[i][0] = 0; 
  161.     for(int j=0; j<=l2; ++j) dp[0][j] = 0; 
  162.  
  163.     for(i=1; i<=l1; ++i) 
  164.     { 
  165.         for(j=1; j<=l2; ++j) 
  166.         { 
  167.             if(s1[i-1] == s2[j-1])      //字符串从0开始遍历 
  168.                 dp[i][j] =  dp[i-1][j-1]+1;     //此处一定要有加一操作        //对dp数组的赋值从1开始的,位置0的已经赋值为0 
  169.             else 
  170.             { 
  171.                 dp[i][j] = max(dp[i-1][j],dp[i][j-1]); 
  172.             } 
  173.         } 
  174.     } 
  175.     int ret = 0; 
  176.     for(i=1; i<=l1; ++i) 
  177.         for(j=1; j<=l2; ++j) 
  178.             if(ret < dp[i][j]) 
  179.                 ret = dp[i][j]; 
  180.     cout<<ret<<endl; 
  181.  
  182. void main86() 
  183.     stack<double> si; 
  184.     stack<char> sc; 
  185.  
  186.     double n; 
  187.     char ch; 
  188.     char str[201];   
  189.     string s; 
  190.     while(gets(str)) 
  191.     { 
  192.         s = str; 
  193.         istringstream iss(s); 
  194.         while(!si.empty())  si.pop();    
  195.         while(!sc.empty())  sc.pop(); 
  196.         int i=0;  
  197.         while(!iss.eof()) 
  198.         { 
  199.             iss>>n; 
  200.             si.push(n); 
  201.             if(!iss.eof()) 
  202.             { 
  203.             iss>>ch;             
  204.         //  cout<<++i<<"       "<<n<<"        "<<ch<<endl; 
  205.             if(!sc.empty()) 
  206.             { 
  207.                 char tmp = sc.top(); 
  208.                 if(ch == '+' || ch == '-'
  209.                 { 
  210.                     sc.pop(); 
  211.                     double itmp = si.top(); 
  212.                     si.pop(); 
  213.                     double itmp2 = si.top(); 
  214.                     si.pop(); 
  215.                     switch(tmp) 
  216.                     { 
  217.                     case '+'
  218.                         si.push(itmp+itmp2); 
  219.                         break
  220.                     case '-'
  221.                         si.push(itmp2 - itmp); 
  222.                         break
  223.                     case '*'
  224.                         si.push(itmp * itmp2); 
  225.                         break
  226.                     case '/'
  227.                         si.push(itmp2 / itmp); 
  228.                         break
  229.                     } 
  230.                     sc.push(ch); 
  231.                 }else               //当前取到的是*,/ 
  232.                 { 
  233.                     double itmp ; 
  234.                     double itmp2; 
  235.                     switch(tmp) 
  236.                     { 
  237.                     case '*'
  238.                         sc.pop(); 
  239.                         itmp = si.top(); 
  240.                         si.pop(); 
  241.                         itmp2 = si.top(); 
  242.                         si.pop(); 
  243.                         si.push(itmp * itmp2); // cout<<itmp * itmp2<<endl; 
  244.                         sc.push(ch); 
  245.                         break
  246.                     case '/'
  247.                         sc.pop(); 
  248.                         itmp = si.top(); 
  249.                         si.pop(); 
  250.                         itmp2 = si.top(); 
  251.                         si.pop(); 
  252.                         si.push(itmp2 / itmp); // cout<<itmp2/ itmp<<endl; 
  253.                         sc.push(ch); 
  254.                         break
  255.                     default
  256.                         sc.push(ch); 
  257.                         break
  258.                     } 
  259.                 } 
  260.             }else 
  261.                 sc.push(ch); 
  262.             } 
  263.         } 
  264.         while(!sc.empty()) 
  265.         { 
  266.             char tmp = sc.top(); 
  267.             sc.pop(); 
  268.             double itmp = si.top(); 
  269.             si.pop(); 
  270.             double itmp2 = si.top(); 
  271.             si.pop(); 
  272.             switch(tmp) 
  273.             { 
  274.             case '+'
  275.                 si.push(itmp + itmp2); 
  276.                 break
  277.             case '-'
  278.                 si.push(itmp2 - itmp); 
  279.                 break
  280.             case '*'
  281.                 si.push(itmp*itmp2); 
  282.                 break
  283.             case '/'
  284.                 si.push(itmp2 / itmp); 
  285.                 break
  286.             }            
  287.         } 
  288.         cout<<fixed<<setprecision(2)<<si.top()<<endl; 
  289.         si.pop(); 
  290.     } 
  291.  
  292. void main87() 
  293. {  
  294.     int n; 
  295.     cin>>n; 
  296.     priority_queue<int,vector<int>,greater<int> > pq; 
  297.     while(n--) 
  298.     { 
  299.         int tmp; 
  300.         cin>>tmp; 
  301.         pq.push(tmp); 
  302.     } 
  303.     int ret = 0; 
  304.     while(pq.size() > 1)          //注意此处求哈夫曼树时候,队列中的元素不能全部出去 
  305.     { 
  306.         int itmp = pq.top(); 
  307.         pq.pop(); 
  308.         int itmp2 = pq.top(); 
  309.         pq.pop(); 
  310.          
  311.         ret += (itmp + itmp2); 
  312.         pq.push(itmp+itmp2); 
  313.     } 
  314.     cout<<ret<<endl; 
  315.  
  316. void main88() 
  317.     vector<string> vs; 
  318.     vs.push_back("Abb"); 
  319.     vs.push_back("aab"); 
  320.     sort(vs.begin(),vs.end()); 
  321.     copy(vs.begin(),vs.end(),ostream_iterator<string>(cout,"  ")); 
  322.  
  323. typedef struct node 
  324.     node *lchild, *rchild; 
  325.     int data; 
  326. }BTree2; 
  327.  
  328. void insert(BTree2 * &root,int data) 
  329.     if(root == NULL) 
  330.     { 
  331.         root = (BTree2 *)malloc(sizeof(BTree2)); 
  332.         root->data = data; 
  333.         root->lchild = root->rchild = NULL; 
  334.     }else if(root->data < data) 
  335.         insert(root->rchild,data); 
  336.     else    insert(root->lchild,data); 
  337.  
  338. void postOrder3(BTree2 *root,vector<int> &v) 
  339.     stack<BTree2 *>  sb; 
  340.     stack<bool> sbb; 
  341.      
  342.     BTree2 *p; 
  343.     bool flag; 
  344.     if(root) 
  345.     {        
  346.         p = root; 
  347.         while(p != NULL || !sb.empty()) 
  348.         { 
  349.             while(p !=  NULL) 
  350.             { 
  351.                 sb.push(p); 
  352.                 p = p->lchild; 
  353.                 sbb.push(false); 
  354.             }    
  355.             p = sb.top(); 
  356.             sb.pop(); 
  357.             flag = sbb.top(); 
  358.             sbb.pop(); 
  359.  
  360.             if(flag)  
  361.             { 
  362.                 cout<<p->data<<" "
  363.                 v.push_back(p->data); 
  364.                 p = NULL; 
  365.             }else 
  366.             { 
  367.                 sb.push(p); 
  368.                 sbb.push(true); 
  369.                 p = p->rchild; 
  370.             } 
  371.         } 
  372.     } 
  373.  
  374. void deleteBTree(BTree2 *root) 
  375.     if(root) 
  376.     { 
  377.         deleteBTree(root->lchild); 
  378.         deleteBTree(root->rchild); 
  379.         free(root); 
  380.     } 
  381.  
  382. void main89() 
  383.     int n; 
  384.     cin>>n; 
  385.     BTree2 *root = NULL; 
  386.     while(n--) 
  387.     { 
  388.         int tmp; 
  389.         cin>>tmp; 
  390.         insert(root,tmp); 
  391.     } 
  392.     vector<int> v; 
  393.     postOrder3(root,v); 
  394.     copy(v.begin(),v.end(),ostream_iterator<int>(cout," ")); 
  395.     deleteBTree(root); 

 

你可能感兴趣的:(C++,算法,STL)