博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
引子(模拟)
阅读量:5337 次
发布时间:2019-06-15

本文共 2413 字,大约阅读时间需要 8 分钟。

模拟题,很水啦.............

判断好字符就好了

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 #define MAXN 1101 12 using namespace std; 13 int ans[MAXN*MAXN]; 14 priority_queue
>q; 15 struct no{ int x1;int y1;int x2;int y2;}T[MAXN*MAXN]; 16 char a[MAXN][MAXN]; 17 int belong[MAXN][MAXN]; 18 int conn[MAXN*10][1001]; 19 int m,n; 20 void find(int i,int j,int x) 21 { 22 int l=j-1,r=j+1; 23 while(a[i][l]!='|') 24 { 25 l--; 26 } 27 while(a[i][r]!='|') 28 { 29 r++; 30 } 31 T[x].y1=l;T[x].y2=r; 32 int up=i-1,dow=i+1; 33 while(a[up][j]!='-')up--; 34 while(a[dow][j]!='-')dow++; 35 T[x].x1=up,T[x].x2=dow; 36 for(int j=l;j<=r;++j) 37 { 38 belong[up][j]=x;belong[dow][j]=x; 39 } 40 for(int i=up;i<=dow;++i) 41 { 42 belong[i][l]=x;belong[i][r]=x; 43 if(a[i][l-1]=='-') 44 { 45 conn[x][i]=l; 46 //printf("conn[%d][%d]\n",x,i); 47 } 48 else if(a[i][r+1]=='-') 49 conn[x][i]=r; 50 } 51 //printf("T[%d].x1=%d T[%d].x2=%d T[%d].y1=%d T[%d].y2=%d\n",x,T[x].x1,x,T[x].x2,x,T[x].y1,x,T[x].y2); 52 return ; 53 } 54 int BFS(int x,int y) 55 { 56 //printf("x=%d y=%d\n",x,y); 57 int l=x,r=y,ok_l=0,ok_r=0;//0 向左 1 向下 58 if(a[l][r+1]=='-')ok_r=1; 59 if(a[l][r-1]=='-')ok_r=-1; 60 l+=ok_l;r+=ok_r; 61 //printf("ok_r=%d %d %d\n",ok_r,l,r); 62 while(belong[l][r]==0) 63 { 64 //printf("l=%d r=%d\n",l,r); 65 r+=ok_r; 66 l+=ok_l; 67 if(a[l][r]=='+') 68 { 69 if(ok_r!=0) 70 { 71 ok_r=0; 72 ok_l=1; 73 } 74 else if(ok_l!=0) 75 { 76 ok_l=0; 77 if(a[l][r+1]=='-')ok_r=1; 78 else ok_r=-1; 79 } 80 } 81 } 82 return belong[l][r]; 83 } 84 void DFS(int x) 85 { 86 for(int i=T[x].x2;i>=T[x].x1;--i) 87 { 88 if(conn[x][i]!=0) 89 { 90 int nxt=BFS(i,conn[x][i]); 91 //printf("nxt=%d\n",nxt); 92 DFS(nxt); 93 } 94 } 95 ans[++ans[0]]=x; 96 //printf("ans=%d\n",x); 97 } 98 signed main() 99 {100 scanf("%d%d",&n,&m);101 for(int i=1;i<=n;++i)102 {103 scanf("%s",a[i]+1);104 }105 for(int i=1;i<=n;++i)106 {107 int j=1;108 while(j<=m)109 {110 int x=0;int r=j;111 if(a[i][j]>='0'&&a[i][j]<='9')112 {113 while(a[i][r]>='0'&&a[i][r]<='9')114 {115 x=x*10+a[i][r]-'0';116 r++;117 }118 find(i,j,x);119 }120 j=r;j++;121 }122 }123 DFS(1);124 for(int i=1;i<=ans[0];++i)125 {126 printf("%d\n",ans[i]);127 }128 }
View Code

 

转载于:https://www.cnblogs.com/Wwb123/p/11342600.html

你可能感兴趣的文章
简历准备
查看>>
我的博客——第一天。
查看>>
ROS-USB摄像头
查看>>
jsp 按钮 超链接 直接跳转至另一页面
查看>>
C++网络编程--简单的WinSock代码
查看>>
构建Vue开发环境
查看>>
最新版本libjigle在windowsxp下编译过程
查看>>
实现算法2.2的程序
查看>>
特殊字符
查看>>
Java Web学习过程的思维导图
查看>>
frequentism-and-bayesianism-chs
查看>>
CIFAR-10 Competition Winners: Interviews with Dr. Ben Graham, Phil Culliton, & Zygmunt Zając
查看>>
如何在命令行模式下查看Python帮助文档---dir、help、__doc__
查看>>
9图教你开口就能说重点
查看>>
A Tour of Go : Exercise: Loops and Functions
查看>>
linux中chmod与chown两个命令详解
查看>>
获取用户真实ip
查看>>
python之模块随笔记-sys
查看>>
字符串-最长回文子串O(n)
查看>>
《Java技术》第二次作业--面向对象基础
查看>>