NYOJ592spiral grid
2016-09-02 23:38
399 查看
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=592
思路:(1)建图 (2)打素数表 (3)BFS搜索
代码:
思路:(1)建图 (2)打素数表 (3)BFS搜索
代码:
#include <cstdio> #include <cstring> #include <cmath> int s[110][100]; int v[110][100]; int t_cnt = 1; bool flag ; typedef struct node { int x,y; int step; } node; node st,en,que[500000]; void init() { memset(s,0,sizeof(s)); int cnt = 10000; //printf("!!"); for(int i = 0; i < 100; ++i)s[0][i] = cnt--; for(int i = 1; i < 100; ++i)s[i][99] = cnt--; for(int i = 98; i >= 0; --i)s[99][i] = cnt--; for(int i = 98; i > 0; --i)s[i][0] = cnt--; int i = 1,j = 1; //printf("haha"); while(cnt > 0) { while(!s[i][j])s[i][j++] = cnt--; --j; ++i; while(!s[i][j])s[i++][j] = cnt--; --i; --j; while(!s[i][j])s[i][j--] = cnt--; ++j; --i; while(!s[i][j])s[i--][j] = cnt--; ++i; ++j; } } int isP[10000 + 5]; void prime() { memset(isP,-1,sizeof(isP)); isP[1] = 0; for(int i = 2; i <= 10000; ++i) { if(isP[i]) { for(int j = 2; j * i <= 10000; ++j) { isP[j * i] = 0; } } } } int dx[] = {-1,0,1,0}; int dy[] = {0,1,0,-1}; void bfs() { memset(que,0,sizeof(que)); node t,temp; st.step = 0; int head,tail; head = tail = 0; que[tail++] = st; while(head < tail) { temp = que[head++]; for(int i = 0;i < 4;++i) { t.x = temp.x + dx[i]; t.y = temp.y + dy[i]; t.step = temp.step + 1; if(t.x == en.x && t.y == en.y) { flag = true; printf("Case %d: %d\n",t_cnt++,t.step); return ; } if(t.x >= 0&& t.x <100&&t.y>=0&&t.y<100&&!isP[s[t.x][t.y]]&&!v[t.x][t.y]) { v[t.x][t.y] = 1; que[tail++] = t; } } } } int main() { int a,b; init(); prime(); while(~scanf("%d%d",&a,&b)) { if(isP[b]) printf("Case %d: impossible\n",t_cnt++); else if(a == b) printf("Case %d: 0\n",t_cnt++); else { memset(v,0,sizeof(v)); flag = false; for(int i = 0; i < 100; ++i) for(int j = 0; j < 100; ++j) if(s[i][j] == a) { st.x = i; st.y = j; } else if(s[i][j] == b) { en.x = i; en.y = j; } v[st.x][st.y] = 1; bfs(); if(!flag) printf("Case %d: impossible\n",t_cnt++); } } return 0; }
相关文章推荐
- NYOJ216 A problem is easy
- 深搜 nyoj 43 24 Point game
- (NYoj 230)彩色棒 --欧拉通路,字典树,并查集
- NYOJ 216-A problem is easy
- NYOJ 107 A Famous ICPC Team
- nyoj-1053-Alice and Bob (N)
- NYOJ 14 会场安排问题(经典题目,贪心,区间问题)
- NYoj-分数加减法
- NYOJ256 C小加 之 级数求和
- NYOJ17 单调递增最长子序列(动态规划)
- nyoj 22 素数求和
- NYOJ 79 拦截导弹(基础dp)
- NYOJ283 对称排序
- nyoj737 石子合并 详细
- NYOJ 58 最少步数问题
- nyoj 118 修路方案(次小生成树)
- 星际之门(一)(nyoj 127)
- NYOJ 36--最长公共子序列【LCS】
- NYOJ739 笨蛋难题四
- NYOJ 760 See LCS again(基础dp+哈希表)(复习)