130310周赛
A。胜利大逃亡HDU 1253很简单的三维BFS,直接贴代码。[cpp]#include <iostream>#include <cstdio>#include <algorithm>#include <string>#include <cmath>#include <cstring>#include <queue>#include <set>#include <vector>#include <stack>#include <map>#include <iomanip>#define PI acos(-1.0)#define Max 2000005#define inf 1<<28#define LL(x) (x<<1)#define RR(x) (x<<1|1)#define ll long longusing namespace std;struct kdq{int x,y,z,step;};int movex[6]={0,0,1,-1,0,0};int movey[6]={0,0,0,0,1,-1};int movez[6]={1,-1,0,0,0,0};bool visit[51][51][51];int mm[100][100][100];int A,B,C,T;int inmap(kdq a){if(a.x>=0&&a.x<A&&a.y>=0&&a.y<B&&a.z>=0&&a.z<C)return 1;return 0;}kdq q[Max];int bfs(){int num=0,cnt=0;q[0].x=0,q[0].y=0,q[0].z=0,q[0].step=0;visit[0][0][0]=1;num++;while(num>cnt){kdq temp=q[cnt++];//cout<<temp.x<<" "<<temp.y<<" "<<temp.z<<endl;if(temp.x==(A-1)&&temp.y==(B-1)&&temp.z==(C-1)){return temp.step;}for(int i =0 ;i < 6 ;i ++){kdq next;next.x=temp.x+movex[i];next.y=temp.y+movey[i];next.z=temp.z+movez[i];//cout<<next.x<<" "<<next.y <<" "<<next.z<<endl;next.step=temp.step+1;if(inmap(next)&&!visit[next.x][next.y][next.z]&&!mm[next.x][next.y][next.z]){q[num++]=next;visit[next.x][next.y][next.z]=1;}}}return -1;}int main(){int t;cin>>t;while (t--){scanf("%d%d%d%d",&A,&B,&C,&T);memset(visit,0,sizeof(visit));for( int i =0 ;i < A ; i ++){for (int j =0 ;j < B ;j ++){for (int k = 0; k < C ; k ++){scanf("%d",&mm[i][j][k]);}}}int ans=bfs();if(ans<=T)cout<<ans<<endl;elsecout<<-1<<endl;}return 0;}B。prim ring problemHDU 1016题目意思很简单,我的作法就是从1开始dfs找到即输出,这样可以保证是按照字典序,然后就是dfs的细节了,写的有点粗糙,下次改=。=现在脑袋好乱。[cpp]#include <iostream>#include <cstdio>#include <algorithm>#include <string>#include <cmath>#include <cstring>#include <queue>#include <set>#include <vector>#include <stack>#include <map>#include <iomanip>#define PI acos(-1.0)#define Max 2000005#define inf 1<<28#define LL(x) (x<<1)#define RR(x) (x<<1|1)#define ll long longusing namespace std;int vis[1000];bool isvis[1000];bool flag[1000];void isprime()//素数表,数据不大,所以100以内就够了{flag[0]=1;flag[1]=1;for( int i = 2 ; i < 100 ; i ++){if(!flag[i]){for (int j = i*2 ; j < 100 ; j+= i)flag[j]=1;}}}void dfs(int n,int pre,int num){if(n == num&&!flag[1+pre])//找到即输出 ,这里输出有点麻烦,一开始是用vector的 。。但是忘了earse的用法,怒跪,所以下次改。{cout<<1;for(int i=2;i <=n ;i++){for (int j = 2 ;j <=n ; j ++){if(vis[j]==i)&nb补充:软件开发 , C++ ,
上一个:深入理解递归
下一个:字符串匹配算法之KMP算法
- 更多C/C++疑问解答:
- 关于c++的cout输出的问题。
- 在学校里学过C和C++,不过学的很一般,现在自学C#,会不会很难?
- 全国计算机二级C语言笔试题
- 已知某树有2个2度结点,3个3度结点,4个4度结点,问有几个叶子结点?
- c++数据结构内部排序问题,整数排序
- 2012九月计算机二级C语言全国题库,,急求急求
- 如果assert只有一个字符串作为参数,是什么意思呢?
- C语言中,哪些运算符具有左结合性,哪些具有右结合性,帮忙总结下,谢谢了!
- 为什么用结构体编写的程序输入是,0输不出来啊~~~
- 将IEEE—754的十六进制转化为十进制浮点类型,用C或C++都行,多谢各位大侠啊,非常感谢!
- 为什么这个程序求不出公式?
- 这个链表倒置的算法请大家分析下
- c语言函数库调用
- C语言unsigned int纠错
- C语言快排求解啊