intさわだんのBlack History

刹那的レジェンドになりたい。

POJ 3050 Hopscotch

解法:全探索(dfs)

やるだけである。思ったより簡単で腰を抜かす。

#include <set>
#include <iostream>
#include <cstdio>

using namespace std;

int dx[] = {1,0,-1,0};
int dy[] = {0,1,0,-1};
set<int> tmp;
int ans = 0;
int d[6][6];
void dfs(int x,int y,int s,int g){
  if(s == 6){
    set<int>::iterator it = tmp.find(g);
    if(it == tmp.end()){
      ans++;
      tmp.insert(g);
    }
  }else{
    for(int i = 0;i < 4;i++){
      int nx = x + dx[i];
      int ny = y + dy[i];
      
      if(nx >= 0 && nx < 5 && ny >= 0 && ny < 5){
	dfs(nx,ny,s + 1,g*10+d[nx][ny]);
      }
    }
  }
}

int main(){

  for(int i = 0;i < 5;i++){
    for(int j = 0;j < 5;j++){
      scanf("%d",&d[i][j]);
    }
  }
  
  for(int i = 0;i < 5;i++){
    for(int j = 0;j < 5;j++){
      dfs(i,j,1,d[i][j]);
    }
  }
  
  cout << ans << endl;
  
  return 0;

}