Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
为什么会RE啊?求过路的帮忙看一看~// skingmy.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include<stdio.h> #include<iostream> #include<algorithm> using namespace std; class A{ public: int x; int y; int high; };//辅助表类 A a[1000] = { 0 }; int flag[1000][1000] = { -1 }; int dre[4] = { 0,0,1,-1 };//停停下上 int drec[4] = { 1,-1,0,0 };//右左停停 int array_l[1000][1000] = { 0 }; int length[1000] = { 0 }; int final = 0; bool cmp(A first, A second) { return first.high<second.high; } int find_l(int R, int C, int k) { A temp;//a的邻居 sort(a, a + k, cmp);//将辅助表中的数据的值按照从小到大排序,但保证其在原矩阵中的行和列 for (int h = 0; h < k; h++) { int max = 0; int f = 0;//设置标志记录当前位置是否为终点 for (int q = 0; q < 4; q++) { //从上下左右中去挑选比当前位置更低,且路径最长的点 temp.x = a[h].x + dre[q]; temp.y = a[h].y + drec[q]; temp.high = array_l[temp.x][temp.y]; if (temp.x >= 0 && temp.y >= 0 && temp.x < R && temp.y < C) { if (a[h].high > temp.high)//该点不是终点 { f = 1;//设置记号 if (max < flag[temp.x][temp.y]) max = flag[temp.x][temp.y]; } } } if (f == 0)//当前位置就是终点时 { flag[a[h].x][a[h].y] = 1; length[h] = 1; } else { flag[a[h].x][a[h].y] = max + 1; length[h] = max + 1; } if (final < length[h]) final = length[h]; } return final; } int main() { int R, C, num; int k = 0; cin >> R;//输入行数 cin >> C;//输入列数 for (int i = 0; i<R; i++) for (int j = 0; j<C; j++) { cin >> num; a[k].x = i; a[k].y = j; a[k].high = num; k++;//给辅助表赋值 array_l[i][j] = num; } int length_result=find_l(R,C,k);//寻找最长路径 cout << length_result; getchar(); getchar(); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator