poj 3050 Hopscotch
来源:互联网 发布:淘宝客佣金分成 编辑:程序博客网 时间:2024/04/19 17:08
题意:给你一个5x5的方格,你可以在任意点开始,走5步(上下左右4个方向,可以往回走,和迷宫不一样),把你走的每个方格上的数字按你走方格的顺序排列好(共6个数字,起始点也有一个),求有多少种不同的排列方式。
思路:把每一个点dfs一遍,求总数,其中6个数字的排列可以转化成一个6位数,储存在一个数组里(我用amount[100000]存的),N代表有多少中可能。
#include<stdio.h>
int map[5][5];
int mov[][2]={{-1,0},{0,1},{1,0},{0,-1}};
int amount[100000];
int N=0;
void dfs(int x,int y,int step,int num)// num代表走过的数字按顺序排列起来得到的整数
{
int i,x1,y1,flag;
if(step==6)
{
flag=0;
for(i=0;i<N;i++)
{
if(num==amount[i])
{
flag=1;
break;
}
}
if(!flag)
{
amount[N]=num;
N++;
}
return ;
}
for(i=0;i<4;i++)
{
x1=x+mov[i][0];
y1=y+mov[i][1];
if(x1<0||x1>=5||y1<0||y1>=5||vis[x1][y1])
continue;
dfs(x1,y1,step+1,num*10+map[x1][y1]); //num*10+map[x1][y1]就是把排列转化成数字
}
return ;
}
int main(void)
{
int i,j;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf("%d",&map[i][j]);
for(i=0;i<5;i++) //穷举每一个位置可以走的方案
for(j=0;j<5;j++)
{
memset(vis,0,sizeof(vis));
dfs(i,j,1,map[i][j]);
}
printf("%d\n",N);
}
- POJ 3050 Hopscotch
- poj 3050 Hopscotch DFS
- poj 3050 Hopscotch
- POJ-3050-Hopscotch
- poj 3050 Hopscotch
- POJ 3050 Hopscotch 水~
- POJ 3050 Hopscotch
- POJ-3050 Hopscotch
- POJ 3050 Hopscotch DFS
- POJ 3050 Hopscotch
- POJ 3050 Hopscotch
- poj 3050 Hopscotch 【DFS】
- poj 3050 Hopscotch
- Hopscotch (poj 3050 dfs)
- POJ 3050 Hopscotch
- Hopscotch.(POJ-3050)
- Hopscotch - POJ 3050 DFS
- POJ 3050 Hopscotch
- 7.4 Python 包
- 排队购票
- oracle数据库精炼核心技术
- 新年新BUG
- Palindrome Partitioning
- poj 3050 Hopscotch
- maven构建项目引入jstl后还是报错
- ceph基本架构简述
- 函数的迭代
- jsp错误页面全局配置
- Zookeeper 集群搭建
- BZOJ2959——长跑
- Chrome NET::ERR_CERT_AUTHORITY_INVALID 错误分析及处理
- maven发布web项目时报错ClassNotFoundException