文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院程序开发数据结构一道Google中国挑战赛竞赛题的解法
精品推荐
特别推荐
·网游外挂编写完全攻略
·开发WDM型的USB设备驱动程序
·数据库设计范式深入浅出
·理解软件保护技术之序列号方式
·大型网站必鉴:分销渠道的结构
·你的代码真的很健壮吗
·利用HOOK拦截封包原理
·四种网络游戏外挂的设计方法
·程序语言效率比较
·五子棋算法
·正则表达式从入门到精通
·SQL Server不能启动的常见故障
·Windows应用程序设计的基本术语
·软件本地化与汉化
·Windows中断编程
·windows nt 4.0中文版的开机过程
热点TOP10
·网游外挂编写完全攻略
·兵之利器 软件开发辅助工具纵览
·开发WDM型的USB设备驱动程序
·DCOM揭秘之六
·VS2008 第一次安装心得及使用
·游戏外挂设计技术探讨
·《数据结构》试题下载2004
·饺子馆的物流故事之二——供应链视角下的缺货及品类管理
·代码静态分析工具PC-LINT安装配置
·使用BHO定制你的IE浏览器
·原始套接字透析之Raw Socket基础
·基于CS模式的Winsock网络通讯程序
·程序语言效率比较
·《Windows程序设计》读书笔记之六
·四种网络游戏外挂的设计方法
·用CVSNT与WINCVS实现CVS的架设
·利用HOOK拦截封包原理
·简单对象访问协议(SOAP)初级指南
·带你全面了解数据库应用系统的开发步骤
·UML业务建模实例分析

一道Google中国挑战赛竞赛题的解法

日期:2007年5月3日 作者: 查看:[大字体 中字体 小字体]



  本人与2005年12月13日凌晨参加了google中国编程挑战赛的入围阶段的赛事。虽然最终我感觉自己做出了这道级别为high到mid间的赛题,但是却发现那时入围赛事早已经结束了......。

  相信有不少朋友肯定也参加了那场入围赛,所以我打算把自己的解法写出来,一则虽然题目中的测试用例是全部通过了,但这并不能保证我的解法是正确的,希望大家批评指教;二则相信其他朋友也一定有更好的解法大家一起讨论讨论。希望,这篇文章能起到抛砖引玉的效果。

  一、竞赛题目

Problem Statement
You are given a String[] grid representing a rectangular grid of letters. You are also given a String find,
a word you are to find within the grid. The starting point may be anywhere in the grid. The path may move
up, down, left, right, or diagonally from one letter to the next, and may use letters in the grid more than
once, but you may not stay on the same cell twice in a row (see example 6 for clarification).
You are to return an int indicating the number of ways find can be found within the grid. If the result is
more than 1,000,000,000, return -1.

Definition
Class:
 WordPath
Method:
 countPaths
Parameters:
 vector < string >, string
Returns:
 int
Method signature:
 int countPaths(vector < string> grid, string find)
 (be sure your method is public)

Constraints
 -
grid will contain between 1 and 50 elements, inclusive.
 -
Each element of grid will contain between 1 and 50 uppercase (''A''-''Z'') letters, inclusive.
 -
Each element of grid will contain the same number of characters.
 -
find will contain between 1 and 50 uppercase (''A''-''Z'') letters, inclusive.

Examples
0)
{"ABC", "FED", "GHI"}
"ABCDEFGHI"
Returns: 1
There is only one way to trace this path. Each letter is used exactly once.

1)
{"ABC", "FED", "GAI"}
"ABCDEA"
Returns: 2
Once we get to the ''E'', we can choose one of two directions for the final ''A''.

2)
{"ABC", "DEF", "GHI"}
"ABCD"
Returns: 0
We can trace a path for "ABC", but there''s no way to complete a path to the letter ''D''.

3)
{"AA", "AA"}
"AAAA"
Returns: 108
We can start from any of the four locations. From each location, we can then move in any of the three
possible directions for our second letter, and again for the third and fourth letter. 4 * 3 * 3 * 3 = 108.

4)
{"ABABA", "BABAB", "ABABA", "BABAB", "ABABA"}
"ABABABBA"
Returns: 56448
There are a lot of ways to trace this path.

5)
{"AAAAA", "AAAAA", "AAAAA", "AAAAA", "AAAAA"}
"AAAAAAAAAAA"
Returns: -1
There are well over 1,000,000,000 paths that can be traced.

6)
{"AB", "CD"}
"AA"
Returns: 0
Since we can''t stay on the same cell, we can''t trace the path at all.

This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or
reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited.
(c)2003, TopCoder, Inc. All rights reserved.

  题目的意思大致是这样的:在类 WordPath 中编写一个原型为:int countPaths(vector < string> grid, string find)
的函数,grid相当于一个字母矩阵,grid中的每个字符串含有相同个数的字母,这些字母都是大写的字母,从''A''到''Z'',grid中字母个数的范围是1-50。参数find是要求你在grid中搜索路径的字符串,其同样只含有''A''到''Z''的字符,其个数范围同样是1-50。搜索起点可以从grid中的任何一点开始,然后可以向上,向下,向左,向右,以及对角线移动一格。grid中的每个位置的字母可以多次使用。但路径不能在相同位置停留两次(见用例6)。返回值是个整型数据,表示搜索到的路径总数数。如果这个数值大于1,000,000,000, 则返回-1。

  二、我的解题步骤

  第一步.使用人脑按照题目要求,实际计算一遍。

  这里先用例1为例。在例1的find字符串的第一个字符是''A'',我们可以看到在相应的grid中,''A''在两个位置上出现,由于起点不限,所以我们搜索到的起点有2个;find的第2个字符是B,我们可以看到grid中只出现了1个B,而按照题目要求移动的话,显然只有左上角的那个A可以移动到这个B的位置。我们以次类推一值移动到E,都是唯一一条路经,但最后一个字符还是A,这时按照题目要求,2个A都可以从E移动到达,并且题目也说明每个位置可以多次移动停留,所以这时2个A都符合条件。这样find在grid中的移动路径共有2条,即返回值为2。

  第二步,把上述思维过程,转化为计算机模型。

  1、处理find中每个字符在grid中出现的位置

  1.1 数据结构

  1.1.1

  我们可以看到find中的每个位置的字母可以在grid中多次出现,所以我们有必要把这些位置都纪录下来以便下一步的判断。grid中的每个字母可以这样标记其位置:以字符串序列为纵坐标(0开始),以字母在字符串中的位置为横坐标(0开始)。如用例1中的2个A的位置可以用(0,1)和(1,2)标记。我定义一个结构纪录在grid中的位置:


[1] [2] [3] [4] [5] 下一页 




上一篇:新时代的门前 32位世界中的64位编程

下一篇:Windows Workflow Foundation之概述

一道Google中国挑战赛竞赛题的解法 相关文章:
·中国十大免费电影网站排行
·Google 全球偷窥真相调查
·利用Google突破封锁:下载想要的东西
·暴力摩托:死亡竞赛2000
·清除google搜索栏中的历史记录
·中国古代百句经典名言
·中国餐饮业市场调查预测报告
·中国百大寺庙全集
·Google搜索技巧2007版
·中国网络游戏风云榜 免费网游占2/3
一道Google中国挑战赛竞赛题的解法 相关软件:
·红色警戒 2 之中国崛起
·游遍中国 高清晰的PDF书籍系列经典珍藏版
·一生要读知的100本中国名书高清晰PDF
·中国地图jpg高清晰版
·中国少年儿童智力开发百科全书(上中下)高清PDF全彩图书
·创世卓越 - 中国传世书法高清晰PDF电子书
·创世卓越 - 典藏中国名胜高清晰PDF电子书
·上下五千年 中国历代帝王简介
·中国象棋
·中国象棋大师V3.1

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:viphot