有吃的!
来源:互联网 发布:淘宝手机城 编辑:程序博客网 时间:2024/04/27 16:52
妇添小有一个很厉害的技能:发现吃的!如果有好吃的东西,不论多远,只要一闻就能知道在哪里。这天他刚刚在程设rejudge完,忽然鼻子一抽——有吃的!他决定马上赶去吃这么好吃的东西。
语文男为了考验妇添小的品味,在路中间放了很多馒头,看他会不会饿的先吃馒头。妇添小当然不会让这种雕虫小计得逞!为了保持自己的品味,他决定绕开所有的馒头。Eureka受到妇添小邀请,运用绝世法力构造了很多传送点,任意两个传送点之间都能瞬移(当然传不传,传到哪里都可以随心所欲)。妇添小每次移动只能走上下左右四个方向(瞬移除外,并且瞬移不耗费时间)。现在,妇添小最短多长时间能吃到好吃的东西呢?
(当然,为了出题我们隐瞒了一些事实:不仅好吃的不见了,路上的馒头竟然也不翼而飞了,这真真是个悲伤的故事T.T)
输入:
第一行包含两个数字n,m(1<=n,m<=2000)
接下来包含n行,每行m个字符,表示现在的地图。'.'表示空地,'M‘表示馒头,‘E’表示传送点,'N'表示妇添小所在的位置,'C'表示吃的。'N'和‘C'在地图中出现且仅出现一次。
输出:
语文男为了考验妇添小的品味,在路中间放了很多馒头,看他会不会饿的先吃馒头。妇添小当然不会让这种雕虫小计得逞!为了保持自己的品味,他决定绕开所有的馒头。Eureka受到妇添小邀请,运用绝世法力构造了很多传送点,任意两个传送点之间都能瞬移(当然传不传,传到哪里都可以随心所欲)。妇添小每次移动只能走上下左右四个方向(瞬移除外,并且瞬移不耗费时间)。现在,妇添小最短多长时间能吃到好吃的东西呢?
(当然,为了出题我们隐瞒了一些事实:不仅好吃的不见了,路上的馒头竟然也不翼而飞了,这真真是个悲伤的故事T.T)
输入:
第一行包含两个数字n,m(1<=n,m<=2000)
接下来包含n行,每行m个字符,表示现在的地图。'.'表示空地,'M‘表示馒头,‘E’表示传送点,'N'表示妇添小所在的位置,'C'表示吃的。'N'和‘C'在地图中出现且仅出现一次。
输出:
一个数字,表示妇添小最快能多长时间吃到好吃的。如果永远吃不到,只能说明传送点不够多,输出“Bad Eureka”。
#include <stdio.h>#include <stdlib.h>#define N 2000int map[N][N] = {0};typedef struct queue{ int row; int column; int step; struct queue* next;}Queue; // node of queue /** * Args: * n ---------- map's row-number * m ---------- map's column-number * map[N][N] -- map's detail * startR ----- person's row-number * startC ----- person's column-number * targetR ---- target's row-number * targetC ---- target's column-number * Return: * 0 ---------- create successfully * -1 --------- sth. wrong among creating map */int createMap(int& n, int& m, int map[N][N], int& startR, int& startC, int& targetR, int& targetC){ int i = 0, j = 0; printf("row n and column m:\n"); scanf("%d %d", &n, &m); getchar(); for(i = 0; i < n; i++){ printf("row %d:\n", i+1); for(j = 0; j < m; j++){ char ch; scanf("%c", &ch); if(ch == '.') map[i][j] = 1; else if(ch == 'M') map[i][j] = -1; else if(ch == 'C'){ map[i][j] = 3; targetR = i; targetC = j;} else if(ch == 'E') map[i][j] = 2; else if(ch == 'N'){ map[i][j] = 4; startR = i; startC = j;} else{ getchar(); printf("invalid input\n"); return -1;} getchar(); } } /* matrix of map for(int i = 0; i < n; i++){ printf("\n"); for(int j = 0; j < m; j++) printf("%d ", map[i][j]); } printf("\n"); */ return 0;}/** * Args: * n ---------- map's row-number * m ---------- map's column-number * map[N][N] -- map's detail * dir[4][2] -- 4 direction's: right, left, up, down * stopFlag --- 0: can't reach to target; 1: reach to 'E'; 2: reach to target 'C' * bR --------- BFS Initial Point's row-number * bC --------- BFS Initial Point's column-number * Return: * step ------- step-number */int bfsNtoC(int n, int m, int map[N][N], int dir[4][2], int& stopFlag, int bR, int bC){ int step = 0; Queue* head; head = (Queue*)malloc(sizeof(Queue)); head->row = bR; head->column = bC; head->step = 0; head->next = NULL; Queue* tail = head; while(head != NULL) { for(int i = 0; i < 4; i++) { int row = head->row + dir[i][0]; int col = head->column + dir[i][1]; if(row < n && row >= 0 && col < m && col >= 0 && map[row][col] > 0) { Queue* node = (Queue*)malloc(sizeof(Queue)); node->row = row; node->column = col; node->step = head->step + 1; node->next = NULL; tail->next = node; tail = node; if(map[row][col] == 2) { stopFlag = 1; break; } else if(map[row][col] == 3){ stopFlag = 2; break; } } } Queue* temp = head; map[head->row][head->column] = -2; head = head->next; free(temp); if(stopFlag > 0) break; } if(stopFlag == 0) step = 0; else step = tail->step; while(head != NULL){ Queue* temp = head; head = temp->next; free(temp); } return step;}int main(){ int n = 0, m = 0, stopFlag = 0, step = 0, startR = 0, startC = 0; int targetR = 0, targetC = 0, tempFlag = stopFlag; int dir[4][2] = {{0, 1}, // right {0, -1}, // left {-1, 0}, // up {1, 0} // down }; if(createMap(n, m, map, startR, startC, targetR, targetC) == 0) { step = bfsNtoC(n, m, map, dir, stopFlag, startR, startC); tempFlag = stopFlag; stopFlag = 0; if(tempFlag == 0) printf("Bad Eureka\n"); else if(tempFlag == 2) printf("%d\n", step); else if(tempFlag == 1) printf("%d\n", step+bfsNtoC(n, m, map, dir, stopFlag, targetR, targetC)); } // else error system("PAUSE"); return 0;}
0 0
- 有吃的!
- 有吃的!
- 有酸菜吃的早餐
- 网教17. 有吃的!
- 小学期 有吃的!
- 有馒头吃,就是幸福的
- BITCS2016程序设计 | 17. 有吃的!
- 有肝硬化的人吃什么水果好
- 吃的
- 有口臭吃点薄荷
- 吃牛肉有哪些好处?
- 吃榴莲有哪些好处
- 有胃病怎么吃最好
- 吃泥鳅有什么好处
- 吃粽子有什么用?
- 三 公 大 吃 细 有 出 千 的 吗【加威-信13535353835】三 公 大 吃 细 有 出 千 的 吗
- 吃桃子削不削皮 如何吃有保证
- 吃陈皮会上火吗 吃陈皮有什么功效
- isdigit()在<ctype.h>中
- mybatis代码生成的几种方式
- Country Code
- Android 获取assets的绝对路径
- 辣辗坡媳饶焦饶泳磷刑辗遣谂鼻当
- 有吃的!
- Javascript中以$开头的变量
- 【Java.Web】JSP —— 语法基础
- Android和JavaScript互相调用
- js动态添加div
- select中option被选中事件响应
- sublime-text 2 编码问题
- The 30 CSS Selectors you Must Memorize
- 介质访问控制方法之CSMA/CD学习笔记