439UVa骑士移动
来源:互联网 发布:手机怎么开放端口 编辑:程序博客网 时间:2024/05/17 00:12
visit数组不能用有多余的行 列
#include<stdio.h>#include<string.h>const int MAXN = 8;int visit[MAXN][MAXN];int dist[MAXN][MAXN];int q[MAXN*MAXN];int dx[8]={-2,-2,-1,-1,+1,+1,+2,+2};int dy[8]={-1,+1,-2,+2,-2,+2,-1,+1};int bfs(int i,int j,int ii,int jj);int main(){//freopen("input.txt","r",stdin);char s1[5];char s2[5];while(scanf("%s%s",s1,s2)==2){int sr = s1[1]-'1';int sc = s1[0]-'a';int er = s2[1]-'1';int ec = s2[0]-'a';memset(visit,0,sizeof(visit));int dis = bfs(sr,sc,er,ec);printf("To get from %s to %s takes %d knight moves.\n",s1,s2,dis);}}int bfs(int i,int j,int ii,int jj){int front = 0;int rear = 0;int u=i*MAXN+j;q[rear++] = u;visit[i][j] = 1;dist[i][j] = 0;if(i == ii && j==jj) return dist[i][j];while(front<rear){u = q[front++];i = u/MAXN;j = u%MAXN;for(int d = 0; d < 8;d++){int ni = i + dx[d];int nj = j + dy[d];if(ni>=0&&ni<MAXN&&nj>=0&&nj<MAXN&&!visit[ni][nj]) //此处ni,nj上限必须为实际行列数{q[rear++] = ni*MAXN+nj;visit[ni][nj] = 1;dist[ni][nj] = dist[i][j]+1;if(ni == ii && nj==jj)return dist[ni][nj];}}}}
0 0
- Uva 439 骑士移动
- 439UVa骑士移动
- uva-439 骑士的移动
- UVa OJ 439 - Knight Moves 骑士移动
- uva 439 Knight Moves 骑士移动
- 骑士的移动(Knight Moves,UVa 439)
- UVa 439 Knight Moves 骑士的移动
- 骑士的移动(Knight Moves, UVa 439)
- UVA 439 (骑士移动 第一道DFS 13.07.17)
- uva刷题之路--439 骑士移动
- 习题6-4 骑士的移动 UVa 439
- 习题 6-4 UVA 439 Knight Moves 骑士的移动
- uva 439 Knight Moves 骑士移动 —— bfs
- uva 439 Knight Moves(骑士的移动)BFS
- UVA 439 骑士游历
- UVA-439骑士
- uva 439骑士的移动(图的最短路 bfs)
- 习题6-4 骑士的移动(Knight Moves, UVa 439)
- ssh学习整理笔记
- 将博客搬至CSDN
- 大网站常用清除float浮动的方法
- read obj
- POJ 3190 Stall Reservations(贪心+优先队列)
- 439UVa骑士移动
- CSU 1111 三家人
- uva难度分级列表
- AVL树 平衡二叉树 简介及实现原理
- hdu 5095 Linearization of the kernel functions in SVM(模拟)
- hdu 5969 最大的位或(二进制规律运算)
- swift教程
- arithmetic logic unit (ALU)
- CSU 1592 石子归并(区间dp)