【题目大意】
给出一个5*5的方格,求出从任意一点出发走6步组成的不同序列数。
【思路】
dfs的水题,当作set使用方法的初次学习。每次从任意一点出发进行一次dfs,将序列加入set,最后输出set.size()即可。
1 #include<iostream> 2 #include<cstring> 3 #include<set> 4 using namespace std; 5 int map[6][6]; 6 int dx[4]={0,0,1,-1}; 7 int dy[4]={1,-1,0,0}; 8 set<int> s; 9 10 void dfs(int x,int y,int step,int sum) 11 { 12 if (step==6) 13 { 14 s.insert(sum); 15 return; 16 } 17 for (int i=0;i<4;i++) 18 { 19 int nowx=x+dx[i],nowy=y+dy[i]; 20 if (nowx<0 || nowy<0 || nowx>=5 || nowy>=5) continue; 21 dfs(nowx,nowy,step+1,sum*10+map[nowx][nowy]); 22 } 23 } 24 25 int main() 26 { 27 for (int i=0;i<5;i++) 28 for (int j=0;j<5;j++) scanf("%d",&map[i][j]); 29 for (int i=0;i<5;i++) 30 for (int j=0;j<5;j++) 31 dfs(i,j,1,map[i][j]); 32 cout<<s.size()<<endl; 33 return 0; 34 }
时间: 2024-10-24 11:15:40