首页 > 其他 > 详细

【NOIP2014模拟赛No.1】我要的幸福

时间:2017-06-07 11:01:42      阅读:250      评论:0      收藏:0      [点我收藏+]

OJ题号:ZHOJ1297

思路:搜索。

先预处理注定不能走的路径,然后dfs可以走的路径。

 1 #pragma GCC optimize ("O2")
 2 #include<cstdio>
 3 #include<cstdlib>
 4 #include<cctype>
 5 const int N=1001;
 6 int n,m,len,a[N][N]={{0}},path[N<<1];
 7 int getint() {
 8     register char ch;
 9     while(!isdigit(ch=getchar()));
10     register int x=ch^0;
11     while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^0);
12     return x;
13 }
14 void printpath() {
15     for(int i=0;i<len;i++) printf("%d ",path[i]);
16     puts("");
17 }
18 void dfs(int x,int y) {
19     if(!a[x][y]) return;
20     path[x+y]=a[x][y];
21     if((x+y+1)==len) {
22         printpath();
23         exit(0);
24     }
25     if((x+1)==n) {
26         dfs(x,y+1);
27         return;
28     }
29     if((y+1)==m) {
30         dfs(x+1,y);
31         return;
32     }
33     if(a[x+1][y]<a[x][y+1]) {
34         dfs(x+1,y);
35         dfs(x,y+1);
36     }
37     else {
38         dfs(x,y+1);
39         dfs(x+1,y);
40     }
41 }
42 int main() {
43     n=getint();
44     m=getint();
45     len=n+m-1;
46     for(register int i=0;i<n;i++) {
47         for(register int j=0;j<m;j++) {
48             a[i][j]=getint();
49         }
50     }
51     for(register int i=n-1;i>=0;i--) {
52         for(register int j=m-1;j>=0;j--) {
53             if((i==(n-1))&&(j==(m-1))) continue;
54             if(!a[i+1][j]&&!a[i][j+1]) a[i][j]=0;
55         }
56     }
57     if(a[n-1][m-1]) dfs(0,0);
58     puts("Oh,the life is too difficult!");
59     return 0;
60 }

 

【NOIP2014模拟赛No.1】我要的幸福

原文:http://www.cnblogs.com/skylee03/p/6955794.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!