程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> uva639(放車問題)-回溯法

uva639(放車問題)-回溯法

編輯:C++入門知識

[cpp]   #include<stdio.h>   char s[8];   int map[5][5],n;   int ok(int a,int b)   {       for(int i=a;i>=0;i--)           if(map[i][b]<0) return 0;           else if(map[i][b]==0) break;           for(int j=b;j>=0;j--)               if(map[a][j]<0) return 0;               else if(map[a][j]==0) break;               return 1;   }   int dfs(int i,int j)   {       int max=0,count=0;       while(i<n)       {           if(map[i][j]&&ok(i,j))           {               map[i][j]=-1;               count=dfs(i,j+1)+1;               if(max<count) max=count;               map[i][j]=1;           }           if(j>=n-1)           {               i++;               j=0;           }           else j++;       }       return max;   }   int main()   {       int i,j;       while(scanf("%d",&n)==1&&n)       {           for(i=0;i<n;i++)           {               scanf("%s",s);               for(j=0;j<n;j++)                   if(s[j]=='.') map[i][j]=1;                   else if(s[j]=='X') map[i][j]=0;           }           printf("%d\n",dfs(0,0));       }       return 0;   }  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved