对比poj3050

时间:2023-03-08 22:37:04
#include <stdio.h>
const int MAXN = 10;
const int dir[4][2] = { {-1, 0}, {1, 0}, {0, -1}, {0, 1} };
int map[MAXN][MAXN];
int  have[1000100],d[6];
int total;  

void dfs(int x, int y, int step)
{
    if(step == 6)
    {
		int num=0;
		for(int k=0;k<6;k++)
		{
			num=num*10;
			num=num+d[k];
		}
        if(!have[num])
        {
            //cout << cur << endl;
            have[num] = 1, total++;
        }  

        return ;
    }
    for(int i = 0; i < 4; i++)
    {
		d[step]=map[x][y];
        int tx = x + dir[i][0];
        int ty = y + dir[i][1];
        if(tx >= 0 && tx < 5 && ty >= 0 && ty < 5)
        {
            //visit[tx][ty] = true;
            dfs(tx, ty, step + 1);
            //visit[tx][ty] = false;
        }
    }
}  

int main()
{
    //freopen("aa.in", "r", stdin);
    //freopen("bb.out", "w", stdout);  

    total = 0;
    for(int i = 0; i < 5; ++i)
    {
        for(int j = 0; j < 5; ++j)
        {
            scanf("%d",&map[i][j]);
        }
    }  

    for(int i = 0; i < 5; ++i)
    {
        for(int j = 0; j < 5; ++j)
        {
            dfs(i, j, 0);
        }
    }  

  printf("%d\n",total);
    return 0;
}