poj1088 dfs

来源:互联网 发布:php数据表统计插件 编辑:程序博客网 时间:2024/06/06 00:50

好吧发现大部分题解都是动态规划。。

也对,最长递减子序列嘛,其实我觉得我现在简直相当于不会动态规划的样子。。

搜索也很裸,,

#include<stdio.h>#include<iostream>#define max 110using namespace std;int map[max][max],sum,r,c;int po[4][2]={{1,0},{0,1},{-1,0},{0,-1}};struct node{    int value,step;}node[110][110];int ok(int x,int y){    if(x<0||x>=r||y<0||y>=c)return 0;else return 1;}void dfs(int x,int y){    int a,b;    int step=node[x][y].step;    int value=node[x][y].value;    for(int i=0;i<4;i++)    {        a=x+po[i][0];        b=y+po[i][1];        if(ok(a,b)&&node[a][b].value>value&&node[a][b].step<step+1)        {            node[a][b].step=step+1;            dfs(a,b);        }    }}int main(){    while(scanf("%d%d",&r,&c)!=EOF)    {        for(int i=0;i<r;i++)            for(int j=0;j<c;j++)            {                cin>>node[i][j].value;                node[i][j].step=1;            }        for(int i=0;i<r;i++)            for(int j=0;j<c;j++)            {                if(node[i][j].step==1)                    dfs(i,j);                else continue;            }        int maxx=-1;        for(int i=0;i<r;i++){for(int j=0;j<c;j++){if(node[i][j].step>maxx)maxx=node[i][j].step;}}        printf("%d\n",maxx);    }    return 0;}


0 0
原创粉丝点击