算法:深搜

很不错的一道题!!!

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. js获取对象位置的方法

    scrollHeight: 获取对象的滚动高度. scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离 scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最 ...

  2. lnmp下安装ffmpeg和ffmpeg-php教程

    现在我将我的过程方法发布出来. 以下都是用SSH命令 一.安装ffmpeg 操作系统:centos6 安装ffmpeg有两种方式:①.用源码包安装,这个不知道怎么回事老是报错②用yum命令安装,cen ...

  3. iOS开发——C篇&动态内存分配

    再C语言中关于内存是一个很重要的知识点,所以今天我就从c语言的内存分配开始为大家解析一下C语言再iOS开发中非常重要的一些知识. 1:malloc函数的介绍 C语言中开辟内存空间:malloc函数 再 ...

  4. bootstrap--- 两种bootstrap multiselect组件大比拼

    http://www.cnblogs.com/landeanfen/p/5013452.html 1.第一种可以兼容IE,第二种不能兼容

  5. jQueryMobile之Popup

    效果: (1):Tooltip (2):Menu (3):NestedMenu (4):Login ------ 源码: <!DOCTYPE html> <html lang=&qu ...

  6. hdu 4856 Tunnels

    http://acm.hdu.edu.cn/showproblem.php?pid=4856 这道题就是搜索BFS+状压dp,把所经过的隧道的状态用二进制表示,然后dp就行.bfs求出每两个隧道的最短 ...

  7. Android 查看是否有存储卡插入

    String status=Environment.getExternalStorageState(); 2   3 if ( status.equals ( Enviroment.MEDIA_MOU ...

  8. 如何将Java Web项目部署到服务器上

    转自:(此处更详细)http://blog.csdn.net/gulu_gulu_jp/article/details/50994003 一.前言 前面我们已经尝过了在云服务器上部署代码的甜头了,现在 ...

  9. Best Time to Buy and Sell Stock IV 解答

    Question Say you have an array for which the ith element is the price of a given stock on day i. Des ...

  10. C++编程规范之20:避免函数过长,避免嵌套过深

    摘要: 短胜于长,平胜于优,过长的函数和嵌套过深的代码块的出现,经常是因为没能赋予一个函数以一个紧凑的职责所致,这两种情况通常都能够通过更好的重构予以解决. 每个函数都应该顾其名而能知其义,易于理解的 ...