标签:技术 problem rate cal line isp cin ide integer
3 6 HFDFFB AJHGDH DGAGEH
6
算法:深搜
代码一:
1 #include<iostream> 2 using namespace std; 3 int bb[26]={0},s,r,sum=1,s1=1; 4 char aa[25][25]; 5 int dir[4][2]={-1,0,1,0,0,-1,0,1}; 6 void dfs(int a,int b) 7 { 8 int a1,b1; 9 if(s1>sum) sum=s1; //更新最大数值 10 for(int i=0;i<4;i++) 11 { 12 a1=a+dir[i][0]; //用bb数组记录访问过的字母 13 b1=b+dir[i][1]; 14 if(a1>=0&&a1<s&&b1>=0&&b1<r&&!bb[aa[a1][b1]-‘A‘]) 15 { 16 s1++; 17 bb[aa[a1][b1]-‘A‘]=1; //如果在这条单线上没有记录改字母被访问过,则总数++; 18 dfs(a1,b1); //第一个字母总要被访问,所以不用回溯; 19 bb[aa[a1][b1]-‘A‘]=0; //回溯反标记 20 s1--; //临时记录恢复 21 } 22 } 23 } 24 int main() 25 { 26 cin>>s>>r; 27 for(int i=0;i<s;i++) 28 for(int j=0;j<r;j++) 29 cin>>aa[i][j]; 30 bb[aa[0][0]-‘A‘]=1; 31 dfs(0,0); 32 cout<<sum<<endl; 33 return 0; 34 }
代码二:
1 #include <stdio.h> 2 #include<iostream> 3 using namespace std; 4 int qq[25][25]; 5 int fx[4]={1,0,-1,0},fy[4]={0,-1,0,1},pd[30],sum,ans;//右下左上 6 void fun(int x,int y) 7 { 8 if(ans<sum)ans=sum; 9 if(qq[x][y]==0) return; 10 for(int i=0;i<4;i++) 11 { 12 if(qq[x+fx[i]][y+fy[i]]!=0&&pd[qq[x+fx[i]][y+fy[i]]]==0) 13 { 14 sum++; 15 pd[qq[x+fx[i]][y+fy[i]]]=1; 16 fun(x+fx[i],y+fy[i]); 17 pd[qq[x+fx[i]][y+fy[i]]]=0; 18 sum--; 19 } 20 } 21 } 22 int main(int argc, char *argv[]) 23 { 24 int r,s; 25 scanf("%d%d",&r,&s); 26 for(int i=1;i<=r;i++) 27 for(int j=1;j<=s;j++) 28 { 29 char t; 30 cin>>t; 31 qq[i][j]=t-‘A‘+1; 32 } 33 pd[qq[1][1]]=1; 34 sum=ans=1; 35 fun(1,1); 36 printf("%d",ans); 37 return 0; 38 }
标签:技术 problem rate cal line isp cin ide integer
原文地址:https://www.cnblogs.com/huashanqingzhu/p/10630870.html