算法:深搜

很不错的一道题!!!

Fling is a kind of puzzle games available on phone.

This game is played on a board with 7 rows and 8 columns. Each puzzle consists of a set of furballs placed on the board. To solved a puzzle, you need to remove the furballs from board until there is no more than one furball on the board. You do this by ´flinging´
furballs into other furballs, to knock them off the board. You can fling any furballs in four directions (up, left, right, down). The flung furball stops at the front grid of another one as soon as knocking it. And the knocked furball continues to rolling
in the same direction until the last knocked one goes off the board. For instance, A furball at (0, 0) rolls right to the furball at (0, 5), then it will stop at (0, 4). Moreover, the latter will roll to right. You cannot fling a furball into a neighbouring
furball, the one next to in any of four directions. However, it is permitted for a rolling ball knocks into a ball with a neighbour in that direction.







Input

The input contains multiple test cases.

For each case, the 7 lines with 8 characters describe the board. ´X´ represents a empty grid and ´O´ represents a grid with a furball in it. There are no more than 12 furballs in any board.

Each case separated by a blank line.



Output

For each case, print a line formatted as "CASE #NUM:", where NUM is the number of current case.

Then every ´fling´ prints a line. Each line contains two integers X, Y and a character Z. The flung furball is located at grid (X, Y), the top-left grid is (0, 0). And Z represents the direction this furball towards: U (Up), L (Left), R (Right) and D (Down);

Print a blank line between two cases.

You can assume that every puzzle could be solved.

If there are multiple solve sequences, print the smallest one. That is, Two sequences A (A1, A2, A3 ... An) and B (B1, B2, B3 ... Bn). Let k be the smallest number that Ak != Bk.

Define A < B :

(1) X in Ak < X in Bk;

(2) Y in Ak < Y in Bk and X in Ak = X in Bk;

(3) Z in Ak < Z in Bk and (X,Y) in Ak = (X,Y) in Bk;

The order of Z: U < L < R < D.



Sample Input

XXXXXXXX

XXOXXXXX

XXXXXXXX

XXXXXXXX

XOXXXXOX

XXXXXXXX

XXXXXXXX



XXXXXXXX

XOXOXOOX

XXXXXXXX

XXXXXXXX

XXXXXXXX

XXXXXXXX

XXXXXXXX

Sample Output

CASE #1:

4 6 L

1 2 D



CASE #2:

1 1 R

1 4 L

1 3 R

代码:

 #include <iostream>
#include <string>
#include <iomanip>
#include <cstring>
#include <algorithm>
#include <stdio.h>
using namespace std;
char ch[10][10];
int cur[4][2] = {{-1,0},{0,-1},{0,1},{1,0}}; //U、L、R、D
char ch1[] = "ULRD";
int n=7,m=8,cnt;
int path[15];int pathc[15];
int cmp(int bx,int by)
{
if(bx<0||by<0||bx>=n||by>=m)
return 0;
return 1;
}
int dfs(int ax)
{
if(ax==cnt-1)
return 1; int tx[15],ty[15],i,j,k,dx,dy;
for( i=0;i<n;i++)
{
for(j=0;j<m;j++)
if(ch[i][j]=='O')
{ for(k=0;k<4;k++)
{
int mo=0;int cd=0;
dx=i+cur[k][0];
dy=j+cur[k][1];
if(ch[dx][dy]=='O')
continue;
while(cmp(dx,dy))
{
if(ch[dx][dy]=='O')
{
mo=1;
tx[cd]=dx;
ty[cd++]=dy;
}
dx+=cur[k][0];
dy+=cur[k][1];
}
if(mo)
{
ch[i][j]='X';
for(int ii=0;ii<cd;ii++)
{
ch[tx[ii]][ty[ii]]='X';
ch[tx[ii]-cur[k][0]][ty[ii]-cur[k][1]]='O';
} path[ax]=i*m+j;
pathc[ax]=k;
if(dfs(ax+1)) return 1;
ch[i][j]='O';
dx=i+cur[k][0];
dy=j+cur[k][1];
while(cmp(dx,dy))
{
if(ch[dx][dy]=='O')
ch[dx][dy]='X';
dx+=cur[k][0];
dy+=cur[k][1];
}
for(int ii=0;ii<cd;ii++)
ch[tx[ii]][ty[ii]]='O';
}
}
}
}
return 0;
}
int main()
{
int i,j,p=0;
while(~scanf("%s",&ch[0]))
{
for(i=1;i<n;i++)
cin>>ch[i];
cnt=0;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(ch[i][j]=='O')
cnt++;
dfs(0);
if(p) cout<<endl;
cout<<"CASE #"<<++p<<":"<<endl;
for(i=0;i<cnt-1;i++)
cout<<path[i]/m<<" "<<path[i]%m<<" "<<ch1[pathc[i]]<<endl;
}
return 0;
}

Fling!的更多相关文章

  1. LIstView 滚动 异步 加载更多 mono for android ScrollStateChanged ScrollState.Idle; Fling;TouchScroll

    今天项目需要实现一下列表的分页加载 找到了Listview的ScrollStateChanged方法. 和大家分享一下 //先找到Listview ListView order = FindViewB ...

  2. Fling——K

    K. Fling Fling is a kind of puzzle games available on phone.This game is played on a board with 7 ro ...

  3. Android: 触屏fling/scroll/drag的区别及其详细过程

    Google了一下,终于搞清了touch screen下的几种操作模式(对应的是事件). 对于一个view, 常用的操作有点击(click)和长按(long press)二种.实际上,这些操作类型是A ...

  4. Android “swipe” vs “fling”

    onFling will get executed when a user makes a "fling" motion, and said motion has a veloci ...

  5. hdu 3500 Fling (dfs)

    Fling Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Submi ...

  6. android问题及其解决-优化listView卡顿和怎样禁用ListView的fling

    问题解决-优化listView卡顿和怎样禁用ListView的fling 前戏非常长,转载请保留出处:http://blog.csdn.net/u012123160/article/details/4 ...

  7. Scroller——startScroll、fling(惯性滑动)

    Scroller主要用于平滑滚动,主要使用的滚动方法有:startScroll.fling. startScroll(int startX, int startY, int dx, int dy, i ...

  8. 【HDOJ】3500 Fling

    题意巨难懂.简言之,就是球互相碰撞时,主动碰撞的球将会停止,另一个球将沿着碰撞方向继续移动,不断碰撞.但是无法弹射紧挨着的球,但是若a弹射b,bc相邻,这种情况b可以弹射c. #include < ...

  9. android自定义控件一站式入门

    自定义控件 Android系统提供了一系列UI相关的类来帮助我们构造app的界面,以及完成交互的处理. 一般的,所有可以在窗口中被展示的UI对象类型,最终都是继承自View的类,这包括展示最终内容的非 ...

随机推荐

  1. 《Javascript模式》之对象创建模式读书笔记

    引言: 在javascript中创建对象是很容易的,可以使用对象字面量或者构造函数或者object.creat.在接下来的介绍中,我们将越过这些方法去寻求一些其他的对象创建模式. 我们知道js是一种简 ...

  2. Speed-BI报表按钮链接设置

    使用Speed-BI开发报表的时候,常常会需要增加一个链接按钮,点击按钮可跳转到其他报表或外部链接:那么我们可以通过新增‘仪表盘’--‘文本框’图表(如图1), <ignore_js_op> ...

  3. navicat:cannot create oci environment

    1.请注意红色箭头处的配置是从oracle官网下载的安装包 ,当然百度也是很强大的.(建议是在navicat安装目录下解压) 2.红色方框内的是你本地的oracle数据库的sqlplus.exe启动地 ...

  4. spark1.1.0源码阅读-executor

    1. executor上执行launchTask def launchTask( context: ExecutorBackend, taskId: Long, taskName: String, s ...

  5. PHP 访问类中的静态属性

    静态属性和普通属性不一样,静态属性只属于类本身而不属于类的任何实例,所以他们的访问方式也不一样.你可以把静态属性认为是存储在类当中的全局变量,而且你可以在任何地方通过类来访问它们. 在类本身中访问静态 ...

  6. 通过MYSQL命令行直接建数据库

    因为同事要求,在进行MYSQLDUMP的导入库时,加一个日期标签, BUT,MYSQLDUMP的前提是数据库中要存在数据库名, 于是通过-e 参数执行命令. 这让我想起了前不久请教同事,如果AWK传变 ...

  7. oschina服务器软件

    服务器软件 74Apache模块 54Nginx扩展模块 13Radius相关 94PaaS 系统 29服务发现/注册和协调 17Docker 扩展 7Docker 映像 83应用服务器 189HTT ...

  8. 超给力的HTML5 3D动画欣赏及源码下载

    HTML5有着非常巨大的魅力,尤其是CSS3和Cavnas,可以帮助页面渲染得非常炫酷.值得一提的是,利用HTML5的3D特性可以帮助你更加方便地在网页上实现3D动画特效.本文分享的这些HTML5 3 ...

  9. EF 接收OUTPUT参数的方法 How to Retrieve Stored Procedure Output Parameters in Entity Framework

    原文地址:http://blogs.microsoft.co.il/gilf/2010/05/09/how-to-retrieve-stored-procedure-output-parameters ...

  10. MD中bitmap源代码分析--状态机实例

    1. page_attrs的状态转换关系 之前说过,bitmap的优化核心是:bitmap设置后批量写入:bitmap延时清除.写bit用bitmap_statrwrite() + bitmap_un ...