栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 2594 Driving Straight

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 2594 Driving Straight

#include<iostream>#include<cstring>#include<string>using namespace std;string a[800];bool p[160005];int d[160005],map[160005][5],T,m,n,tmp,tmp1,que[160000],head,tail,now,F;int main(){ios::sync_with_stdio(false);cin >> T ;while ( T-- ){cin >> n >> m ;cin.get();memset(p,false,sizeof(p));memset(d,0,sizeof(d));memset(map,0,sizeof(map));for ( int i = 2*m-1 ; i >= 1 ; --i )getline(cin,a[i]);for ( int i = 1 ; i <= m ; ++i ){for ( int j = 1 ; j <= n ; ++j ){if ( a[2*i-1][2*j-1] == '-' && j < n ) { tmp = (i-1)*n+j; ++map[tmp][0]; tmp1 = map[tmp][0]; map[tmp][tmp1] = tmp+1 ; ++map[tmp+1][0]; tmp1 = map[tmp+1][0]; map[tmp+1][tmp1] = tmp ; }if ( a[2*i][2*j-1-1] == '|' && i < m ) {tmp = (i-1)*n+j;++map[tmp][0];tmp1 = map[tmp][0];map[tmp][tmp1] = tmp+n ;++map[tmp+n][0];tmp1 = map[tmp+n][0];map[tmp+n][tmp1] = tmp ; }}} que[0] = m*n ;d[m*n] = 0 ;p[m*n] = true;head = 0 ;tail = 0 ;while ( head <= tail ){now = que[head];for ( int i = 1 ; i <= map[now][0] ; ++i ){if ( !p[map[now][i]] ) {d[map[now][i]] = d[now]+1;p[map[now][i]] = true ;++tail;que[tail] = map[now][i];if ( que[tail] == 1 ) break;}}++head;if ( que[tail] == 1 ) break;}now = 1 ;if ( d[now+1]+1 == d[now] ) {cout << "E" << endl;now = now+1;F = 2 ;}else{cout << "N" << endl;now = now+n;F = 1;}for ( int i = 2 ; i <= d[1] ; ++i )for ( int k = 1 ; k <= map[now][0] ; ++k ){if ( d[map[now][k]]+1 == d[now] ) {if ( now+1 == map[now][k] ) {if ( F == 1 ) cout << "R" ;if ( F == 2 ) cout << "F" ;if ( F == 3 ) cout << "L" ;F = 2 ;now = map[now][k] ;}else if ( now-1 == map[now][k] ){if ( F == 1 ) cout << "L" ;if ( F == 3 ) cout << "R" ;if ( F == 4 ) cout << "F" ;F = 4 ;now = map[now][k] ;}else if ( now+n == map[now][k] ){if ( F == 1 ) cout << "F" ;if ( F == 2 ) cout << "L" ;if ( F == 4 ) cout << "R" ; F = 1 ;now = map[now][k] ;}else if ( now-n == map[now][k] ){if ( F == 2 ) cout << "R" ;if ( F == 3 ) cout << "F" ;if ( F == 4 ) cout << "L" ;F = 3 ;now = map[now][k] ;}break;}}cout << endl;if ( T ) cout << endl;}return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/367202.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号